aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2021-11-10 15:27:02 +0100
committerHarald Musum <musum@yahooinc.com>2021-11-10 15:27:02 +0100
commit7b8ff1e3984f59fe90b7db8cac3c85e9c6fc34a5 (patch)
tree0f92c24f15ab0e65f5403618a59862ace41398cd /config
parentc2f747cac63ae386a3c8b41674eca8c651ed0bea (diff)
Always update config when generation has changed
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java5
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java14
2 files changed, 18 insertions, 1 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..d1eab1e1ff1 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
@@ -203,6 +203,11 @@ 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();
+ this.config.set(new ConfigState<>(true, generation, applyOnRestart, !config.equals(prev.getConfig()), config, payloadChecksums));
+ }
+
/**
* Used by {@link FileConfigSubscription} and {@link ConfigSetSubscription}
*/
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.