From 65dd293caa9e3ce30453ee0ae217ac2ee69c5385 Mon Sep 17 00:00:00 2001 From: gjoranv Date: Fri, 14 Jan 2022 19:00:06 +0100 Subject: Inline getConfigsOptional() --- .../src/main/java/com/yahoo/container/di/ConfigRetriever.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java b/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java index c90f05e2227..aadaffe9acc 100644 --- a/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java +++ b/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java @@ -70,12 +70,6 @@ public final class ConfigRetriever { allKeys.addAll(bootstrapKeys); setupComponentSubscriber(allKeys); - var maybeSnapshot = getConfigsOptional(leastGeneration, isInitializing); - log.log(FINE, () -> "getConfigsOnce returning " + maybeSnapshot); - return maybeSnapshot; - } - - private Optional getConfigsOptional(long leastGeneration, boolean isInitializing) { if (componentSubscriber.generation() < bootstrapSubscriber.generation()) { return getComponentsSnapshot(leastGeneration, isInitializing); } -- cgit v1.2.3 From 4516555a4cb1a533f8bb6627628cc414a33e3650 Mon Sep 17 00:00:00 2001 From: gjoranv Date: Fri, 14 Jan 2022 20:58:57 +0100 Subject: Ensure that components configs are used .. even if the subscriber got a newer generation than the bootstrap subscriber for some reason. --- .../java/com/yahoo/container/di/ConfigRetriever.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java b/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java index aadaffe9acc..0817a87c506 100644 --- a/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java +++ b/container-core/src/main/java/com/yahoo/container/di/ConfigRetriever.java @@ -81,7 +81,21 @@ public final class ConfigRetriever { if (newestBootstrapGeneration < leastGeneration) { return Optional.empty(); } - return bootstrapConfigIfChanged(); + return bootstrapConfigIfChanged() + // At this point, we normally assume that the bootstrap subscriber is one generation ahead + // of the component subscriber, but this is not always the case in practice. + .or(this::componentsSnapshotReceivedBeforeBootstrap); + } + + private Optional componentsSnapshotReceivedBeforeBootstrap() { + if (componentSubscriber.generation() == bootstrapSubscriber.generation()) { + // The component subscriber originally had a newer config generation than the bootstrap subscriber. + // Ensure that this generation is applied if it contains changed configs. + // The root cause is probably that the component subscriber skipped a generation and got + // one ahead of the bootstrap subscriber. + return componentsConfigIfChanged(); + } + return Optional.empty(); } private Optional getComponentsSnapshot(long leastGeneration, boolean isInitializing) { -- cgit v1.2.3