summaryrefslogtreecommitdiffstats
path: root/config/src
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-12-08 12:22:47 +0100
committerJon Bratseth <bratseth@gmail.com>2020-12-08 12:22:47 +0100
commit61a1631be626eb303bab5a5d56b3b499ba5cf2f5 (patch)
treea71290a92d1af4f9780ccad14fa33fbd3c80098b /config/src
parentddac99566ca559b720304299351ec4032e73e736 (diff)
Use generation to determine initial configuration
Diffstat (limited to 'config/src')
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java10
-rw-r--r--config/src/main/java/com/yahoo/config/subscription/impl/ConfigSubscription.java2
-rwxr-xr-xconfig/src/test/java/com/yahoo/config/subscription/ConfigApiTest.java4
3 files changed, 9 insertions, 7 deletions
diff --git a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java
index b4750eebfee..de44d0b86c4 100644
--- a/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java
+++ b/config/src/main/java/com/yahoo/config/subscription/ConfigSubscriber.java
@@ -244,11 +244,13 @@ public class ConfigSubscriber implements AutoCloseable {
* the config should be applied at this time, false otherwise
*/
private boolean acquireSnapshot(long timeoutInMillis, boolean requireChange) {
+ boolean initialConfiguration;
boolean applyOnRestartOnly;
synchronized (monitor) {
if (state == State.CLOSED) return false;
state = State.FROZEN;
applyOnRestartOnly = applyOnRestart;
+ initialConfiguration = generation == -1;
}
long started = System.currentTimeMillis();
long timeLeftMillis = timeoutInMillis;
@@ -274,14 +276,14 @@ public class ConfigSubscriber implements AutoCloseable {
if (currentGen == null) currentGen = config.getGeneration();
allGenerationsTheSame &= currentGen.equals(config.getGeneration());
allGenerationsChanged &= config.isGenerationChanged();
- anyConfigChanged |= config.isConfigChanged();
- applyOnRestartOnly |= requireChange && config.applyOnRestart(); // only if this is reconfig
+ anyConfigChanged |= config.isConfigChanged();
+ applyOnRestartOnly |= config.applyOnRestart();
timeLeftMillis = timeoutInMillis + started - System.currentTimeMillis();
}
- reconfigDue = ((anyConfigChanged && !applyOnRestartOnly) || !requireChange)
+ reconfigDue = ( initialConfiguration || (anyConfigChanged && !applyOnRestartOnly))
&& allGenerationsChanged && allGenerationsTheSame;
- if (requireChange && applyOnRestartOnly) { // if this is a reconfig, disable future reconfigs until restart
+ if (applyOnRestartOnly && ! initialConfiguration) { // disable any reconfig until restart
synchronized (monitor) {
applyOnRestart = applyOnRestartOnly;
}
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 07bbd950c83..b58817305e9 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
@@ -25,7 +25,7 @@ import com.yahoo.vespa.config.protocol.DefContent;
*/
public abstract class ConfigSubscription<T extends ConfigInstance> {
- protected static Logger log = Logger.getLogger(ConfigSubscription.class.getName());
+ protected static final Logger log = Logger.getLogger(ConfigSubscription.class.getName());
protected final ConfigSubscriber subscriber;
private final AtomicReference<ConfigState<T>> config = new AtomicReference<>();
protected final ConfigKey<T> key;
diff --git a/config/src/test/java/com/yahoo/config/subscription/ConfigApiTest.java b/config/src/test/java/com/yahoo/config/subscription/ConfigApiTest.java
index c0080091db6..af2df2bcae7 100755
--- a/config/src/test/java/com/yahoo/config/subscription/ConfigApiTest.java
+++ b/config/src/test/java/com/yahoo/config/subscription/ConfigApiTest.java
@@ -26,10 +26,10 @@ public class ConfigApiTest {
subscriber.nextConfig();
assertNotNull(h.getConfig());
assertEquals(AppConfig.CONFIG_DEF_NAME, ConfigInstance.getDefName(h.getConfig().getClass()));
- assertThat(h.isChanged(), is(true));
+ assertTrue(h.isChanged());
assertTrue(h.toString().startsWith("Handle changed: true\nSub:\n"));
subscriber.close();
- assertThat(subscriber.state(), is(ConfigSubscriber.State.CLOSED));
+ assertEquals(ConfigSubscriber.State.CLOSED, subscriber.state());
}
/**