diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-02-15 14:48:34 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2018-02-15 14:48:34 +0100 |
commit | 87a68b75d729960da7fcada2fc3a7c30119074ed (patch) | |
tree | d181b39fe566349f1ad6e268eff78bc8805aad58 /config/src | |
parent | 0c82afbe492817fc8b7d8a7dfbcd7fdb838323f4 (diff) |
Let RawConfig extend a ConfigInstance to avoid racy config updates in GenericJRTConfigSubscription.
Diffstat (limited to 'config/src')
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; |