From 61a1631be626eb303bab5a5d56b3b499ba5cf2f5 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Tue, 8 Dec 2020 12:22:47 +0100 Subject: Use generation to determine initial configuration --- .../java/com/yahoo/config/subscription/ConfigSubscriber.java | 10 ++++++---- .../com/yahoo/config/subscription/impl/ConfigSubscription.java | 2 +- .../test/java/com/yahoo/config/subscription/ConfigApiTest.java | 4 ++-- .../handler/observability/ApplicationStatusHandler.java | 2 +- 4 files changed, 10 insertions(+), 8 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 { - 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> config = new AtomicReference<>(); protected final ConfigKey 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()); } /** diff --git a/container-search-and-docproc/src/main/java/com/yahoo/container/handler/observability/ApplicationStatusHandler.java b/container-search-and-docproc/src/main/java/com/yahoo/container/handler/observability/ApplicationStatusHandler.java index a58aabfce17..57c5e768cfb 100644 --- a/container-search-and-docproc/src/main/java/com/yahoo/container/handler/observability/ApplicationStatusHandler.java +++ b/container-search-and-docproc/src/main/java/com/yahoo/container/handler/observability/ApplicationStatusHandler.java @@ -86,7 +86,7 @@ public class ApplicationStatusHandler extends AbstractRequestHandler { @Override protected com.yahoo.jdisc.Response newResponse() { com.yahoo.jdisc.Response response = new com.yahoo.jdisc.Response(com.yahoo.jdisc.Response.Status.OK); - response.headers().add("Content-Type", Arrays.asList(new String[]{"application/json"})); + response.headers().add("Content-Type", List.of("application/json")); return response; } }.connect(handler)); -- cgit v1.2.3