aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2021-11-10 21:43:05 +0100
committerGitHub <noreply@github.com>2021-11-10 21:43:05 +0100
commita08fbcaf4b28dc0f33452142545e38836062288b (patch)
tree18b1a387b86b2f1e8368fde112dee7460fef5694
parentecbdff405dfa60524c5ae66da4dad81d337587de (diff)
parenta218ec7919bb0a06708c08759bda962dbad01b90 (diff)
Merge pull request #19962 from vespa-engine/revert-19960-revert-19957-hmusum/always-set-new-config-when-updated-generation-take-2v7.499.15
Always set new config when updated generation, take 3
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java16
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/GenericJRTConfigSubscription.java11
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java14
3 files changed, 39 insertions, 2 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java
index 6a81c2279d1..a3265671d50 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java
@@ -16,7 +16,9 @@ import com.yahoo.vespa.config.TimingValues;
import com.yahoo.vespa.config.protocol.DefContent;
import java.io.File;
+import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.logging.Level;
import java.util.logging.Logger;
import static com.yahoo.vespa.config.PayloadChecksum.Type.MD5;
@@ -203,6 +205,18 @@ public abstract class ConfigSubscription<T extends ConfigInstance> {
this.config.set(new ConfigState<>(true, generation, applyOnRestart, true, config, payloadChecksums));
}
+ void setConfigAndGeneration(Long generation, boolean applyOnRestart, T config, PayloadChecksums payloadChecksums) {
+ ConfigState<T> prev = this.config.get();
+ boolean configChanged = !Objects.equals(prev.getConfig(), config);
+ String message = "Config has changed unexpectedly for " + key + ", generation " + generation;
+ if (configChanged) {
+ if (log.isLoggable(Level.FINE))
+ message = message + ", config in state :" + prev.getConfig() + ", new config: " + config;
+ log.log(Level.WARNING, message);
+ }
+ this.config.set(new ConfigState<>(true, generation, applyOnRestart, configChanged, config, payloadChecksums));
+ }
+
/**
* Used by {@link FileConfigSubscription} and {@link ConfigSetSubscription}
*/
@@ -213,7 +227,7 @@ public abstract class ConfigSubscription<T extends ConfigInstance> {
protected void setConfigIfChanged(T config) {
ConfigState<T> prev = this.config.get();
- this.config.set(new ConfigState<>(true, prev.getGeneration(), prev.applyOnRestart(), !config.equals(prev.getConfig()), config, prev.payloadChecksums));
+ this.config.set(new ConfigState<>(true, prev.getGeneration(), prev.applyOnRestart(), !Objects.equals(prev.getConfig(), config), config, prev.payloadChecksums));
}
void setGeneration(Long generation) {
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 dbe13e90c9c..354489ea946 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
@@ -49,6 +49,17 @@ public class GenericJRTConfigSubscription extends JRTConfigSubscription<RawConfi
}
}
+ // Need to override this method, since we use RawConfig in this class,
+ @Override
+ protected void setNewConfigAndGeneration(JRTClientConfigRequest jrtReq) {
+ // Set generation first, as RawConfig contains generation and that
+ // will make configChanged in ConfigState always true otherwise
+ // (see equals usage in setConfigAndGeneration())
+ setGeneration(jrtReq.getNewGeneration());
+ RawConfig rawConfig = RawConfig.createFromResponseParameters(jrtReq);
+ setConfigAndGeneration(jrtReq.getNewGeneration(), jrtReq.responseIsApplyOnRestart(), rawConfig, jrtReq.getNewChecksums());
+ }
+
// Override to propagate internal redeploy into the config value in addition to the config state
@Override
void setApplyOnRestart(boolean applyOnRestart) {
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java
index 27099790f5b..c6ea79ddbcd 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java
@@ -73,7 +73,7 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
if (jrtReq.hasUpdatedConfig()) {
setNewConfig(jrtReq);
} else {
- setGeneration(jrtReq.getNewGeneration());
+ setNewConfigAndGeneration(jrtReq);
}
}
@@ -110,6 +110,18 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
}
}
+ protected void setNewConfigAndGeneration(JRTClientConfigRequest jrtReq) {
+ try {
+ T configInstance = toConfigInstance(jrtReq);
+ setConfigAndGeneration(jrtReq.getNewGeneration(),
+ jrtReq.responseIsApplyOnRestart(),
+ configInstance,
+ jrtReq.getNewChecksums());
+ } catch (IllegalArgumentException e) {
+ throw new IllegalArgumentException("Bad config in response", e);
+ }
+ }
+
/**
* This method should ideally throw new MissingConfig/Configuration exceptions and let the caller
* catch them. However, this would make the code in JRT/File/RawSource uglier.