summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-02-15 14:48:34 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2018-02-15 14:48:34 +0100
commit87a68b75d729960da7fcada2fc3a7c30119074ed (patch)
treed181b39fe566349f1ad6e268eff78bc8805aad58 /config
parent0c82afbe492817fc8b7d8a7dfbcd7fdb838323f4 (diff)
Let RawConfig extend a ConfigInstance to avoid racy config updates in GenericJRTConfigSubscription.
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java3
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java18
-rwxr-xr-xconfig/src/main/java/com/yahoo/vespa/config/RawConfig.java3
3 files changed, 13 insertions, 11 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java b/config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java
index 7ef94e98cc8..a33c1556dd3 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/GenericConfigSubscriber.java
@@ -10,6 +10,7 @@ import com.yahoo.config.subscription.ConfigSource;
import com.yahoo.config.subscription.ConfigSourceSet;
import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.vespa.config.ConfigKey;
+import com.yahoo.vespa.config.RawConfig;
import com.yahoo.vespa.config.TimingValues;
/**
@@ -43,7 +44,7 @@ public class GenericConfigSubscriber extends ConfigSubscriber {
* @param timingValues {@link TimingValues}
* @return generic handle
*/
- public GenericConfigHandle subscribe(ConfigKey<?> key, List<String> defContent, ConfigSource source, TimingValues timingValues) {
+ public GenericConfigHandle subscribe(ConfigKey<RawConfig> key, List<String> defContent, ConfigSource source, TimingValues timingValues) {
checkStateBeforeSubscribe();
GenericJRTConfigSubscription sub = new GenericJRTConfigSubscription(key, defContent, this, source, timingValues);
GenericConfigHandle handle = new GenericConfigHandle(sub);
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java
index 0eae337809f..3caface8aa4 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java
@@ -20,13 +20,12 @@ import com.yahoo.vespa.config.protocol.JRTClientConfigRequest;
*
*/
@SuppressWarnings("rawtypes")
-public class GenericJRTConfigSubscription extends JRTConfigSubscription {
+public class GenericJRTConfigSubscription extends JRTConfigSubscription<RawConfig> {
- private RawConfig config;
private final List<String> defContent;
@SuppressWarnings("unchecked")
- public GenericJRTConfigSubscription(ConfigKey<?> key,
+ public GenericJRTConfigSubscription(ConfigKey<RawConfig> key,
List<String> defContent,
ConfigSubscriber subscriber,
ConfigSource source,
@@ -38,10 +37,9 @@ public class GenericJRTConfigSubscription extends JRTConfigSubscription {
@Override
@SuppressWarnings("unchecked")
protected void setNewConfig(JRTClientConfigRequest jrtReq) {
- setConfig(jrtReq.getNewGeneration(), null );
- this.config = RawConfig.createFromResponseParameters(jrtReq);
+ setConfig(jrtReq.getNewGeneration(), RawConfig.createFromResponseParameters(jrtReq) );
if (log.isLoggable(LogLevel.DEBUG)) {
- log.log(LogLevel.DEBUG, "in setNewConfig, config=" + this.config);
+ log.log(LogLevel.DEBUG, "in setNewConfig, config=" + this.getConfigState().getConfig());
}
}
@@ -50,13 +48,15 @@ public class GenericJRTConfigSubscription extends JRTConfigSubscription {
@Override
void setGeneration(Long generation) {
super.setGeneration(generation);
- if (this.config != null) {
- this.config.setGeneration(generation);
+ ConfigState<RawConfig> configState = getConfigState();
+
+ if (configState.getConfig() != null) {
+ configState.getConfig().setGeneration(generation);
}
}
public RawConfig getRawConfig() {
- return config;
+ return getConfigState().getConfig();
}
/**
diff --git a/config/src/main/java/com/yahoo/vespa/config/RawConfig.java b/config/src/main/java/com/yahoo/vespa/config/RawConfig.java
index 898e8edfb08..75c5161103e 100755
--- a/config/src/main/java/com/yahoo/vespa/config/RawConfig.java
+++ b/config/src/main/java/com/yahoo/vespa/config/RawConfig.java
@@ -1,6 +1,7 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config;
+import com.yahoo.config.ConfigInstance;
import com.yahoo.text.Utf8String;
import com.yahoo.vespa.config.protocol.CompressionInfo;
import com.yahoo.vespa.config.protocol.JRTClientConfigRequest;
@@ -20,7 +21,7 @@ import java.util.Optional;
*
* @author hmusum
*/
-public class RawConfig {
+public class RawConfig extends ConfigInstance {
private final ConfigKey<?> key;
private final String defMd5;