aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2022-04-19 15:05:18 +0200
committerHarald Musum <musum@yahooinc.com>2022-04-19 15:05:18 +0200
commit10cb083b4c6d70a8c2ce566bfcf74b3e3903781c (patch)
tree7cbb5899ab879a3a36866145eb5be02d97f10187 /config
parentd5b2d4c6b4a929c7e69d76b1521178caa83dffe3 (diff)
Make sure we only add config with updated generation to subscription queue
Diffstat (limited to 'config')
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigRequester.java15
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigSubscription.java12
2 files changed, 14 insertions, 13 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigRequester.java b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigRequester.java
index e86948fb3ae..d77cfc17c92 100644
--- a/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigRequester.java
+++ b/config/src/main/java/com/yahoo/config/subscription/impl/JRTConfigRequester.java
@@ -6,6 +6,7 @@ import com.yahoo.config.ConfigurationRuntimeException;
import com.yahoo.config.subscription.ConfigSourceSet;
import com.yahoo.jrt.Request;
import com.yahoo.jrt.RequestWaiter;
+import com.yahoo.text.internal.SnippetGenerator;
import com.yahoo.vespa.config.Connection;
import com.yahoo.vespa.config.ConnectionPool;
import com.yahoo.vespa.config.ErrorCode;
@@ -19,6 +20,7 @@ import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
import java.util.logging.Logger;
import static java.util.logging.Level.FINE;
@@ -194,7 +196,18 @@ public class JRTConfigRequester implements RequestWaiter {
failures = 0;
sub.setLastCallBackOKTS(Instant.now());
log.log(FINE, () -> "OK response received in handleOkRequest: " + jrtReq);
- sub.updateConfig(jrtReq);
+ if (jrtReq.hasUpdatedGeneration()) {
+ sub.updateConfig(jrtReq);
+ } else if (jrtReq.hasUpdatedConfig()) {
+ SnippetGenerator generator = new SnippetGenerator();
+ int sizeHint = 500;
+ String config = jrtReq.getNewPayload().toString();
+ log.log(Level.WARNING, "Config " + jrtReq.getConfigKey() + " has changed without a change in config generation: generation " +
+ jrtReq.getNewGeneration() + ", config: " + generator.makeSnippet(config, sizeHint) +
+ ". This might happen when a newly upgraded config server responds with different config when bootstrapping " +
+ " (changes to code generating config that are different between versions) or non-deterministic config generation" +
+ " (e.g. when using collections with non-deterministic iteration order)");
+ }
scheduleNextRequest(jrtReq, sub, calculateSuccessDelay(), calculateSuccessTimeout());
}
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 653df26bb53..23c38812d64 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
@@ -4,7 +4,6 @@ package com.yahoo.config.subscription.impl;
import com.yahoo.config.ConfigInstance;
import com.yahoo.config.ConfigurationRuntimeException;
import com.yahoo.config.subscription.ConfigInterruptedException;
-import com.yahoo.text.internal.SnippetGenerator;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.vespa.config.ConfigPayload;
import com.yahoo.vespa.config.TimingValues;
@@ -17,7 +16,6 @@ import java.time.Instant;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
-import java.util.logging.Level;
import static com.yahoo.vespa.config.PayloadChecksum.Type.MD5;
import static java.util.logging.Level.FINE;
@@ -65,16 +63,6 @@ public class JRTConfigSubscription<T extends ConfigInstance> extends ConfigSubsc
} else {
setNewConfigAndGeneration(response);
}
- } else if (response.hasUpdatedConfig()) {
- SnippetGenerator generator = new SnippetGenerator();
- int sizeHint = 500;
- T config = toConfigInstance(response);
- log.log(Level.WARNING, "Config " + key + " has changed without a change in config generation: generation " +
- response.getNewGeneration() + ", config: " + generator.makeSnippet(config.toString(), sizeHint) +
- ". This might happen when a newly upgraded config server responds with different config when bootstrapping " +
- " (changes to code generating config that are different between versions) or non-deterministic config generation" +
- " (e.g. when using collections with non-deterministic iteration order)");
- setNewConfigAndGeneration(response);
}
return newConfigOrException();