diff options
Diffstat (limited to 'container-di/src/main/java/com/yahoo')
4 files changed, 19 insertions, 18 deletions
diff --git a/container-di/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java b/container-di/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java index 75a660789e2..d43f96c9b4a 100644 --- a/container-di/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java +++ b/container-di/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java @@ -95,7 +95,7 @@ public class CloudSubscriberFactory implements SubscriberFactory { } @Override - public long waitNextGeneration() { + public long waitNextGeneration(boolean isInitializing) { if (handles.isEmpty()) throw new IllegalStateException("No config keys registered"); @@ -108,7 +108,7 @@ public class CloudSubscriberFactory implements SubscriberFactory { int numExceptions = 0; while ( ! gotNextGen) { try { - if (subscriber.nextGeneration()) + if (subscriber.nextGeneration(isInitializing)) gotNextGen = true; } catch (IllegalArgumentException e) { diff --git a/container-di/src/main/java/com/yahoo/container/di/ConfigRetriever.java b/container-di/src/main/java/com/yahoo/container/di/ConfigRetriever.java index cf80009f3f6..a7ff6c46a8b 100644 --- a/container-di/src/main/java/com/yahoo/container/di/ConfigRetriever.java +++ b/container-di/src/main/java/com/yahoo/container/di/ConfigRetriever.java @@ -46,10 +46,10 @@ public final class ConfigRetriever { } public ConfigSnapshot getConfigs(Set<ConfigKey<? extends ConfigInstance>> componentConfigKeys, - long leastGeneration) { + long leastGeneration, boolean isInitializing) { // Loop until we get config. while (true) { - Optional<ConfigSnapshot> maybeSnapshot = getConfigsOnce(componentConfigKeys, leastGeneration); + Optional<ConfigSnapshot> maybeSnapshot = getConfigsOnce(componentConfigKeys, leastGeneration, isInitializing); if (maybeSnapshot.isPresent()) { var configSnapshot = maybeSnapshot.get(); resetComponentSubscriberIfBootstrap(configSnapshot); @@ -59,7 +59,7 @@ public final class ConfigRetriever { } Optional<ConfigSnapshot> getConfigsOnce(Set<ConfigKey<? extends ConfigInstance>> componentConfigKeys, - long leastGeneration) { + long leastGeneration, boolean isInitializing) { if (!Sets.intersection(componentConfigKeys, bootstrapKeys).isEmpty()) { throw new IllegalArgumentException( "Component config keys [" + componentConfigKeys + "] overlaps with bootstrap config keys [" + bootstrapKeys + "]"); @@ -70,18 +70,18 @@ public final class ConfigRetriever { allKeys.addAll(bootstrapKeys); setupComponentSubscriber(allKeys); - return getConfigsOptional(leastGeneration); + return getConfigsOptional(leastGeneration, isInitializing); } - private Optional<ConfigSnapshot> getConfigsOptional(long leastGeneration) { - long newestComponentGeneration = componentSubscriber.waitNextGeneration(); + private Optional<ConfigSnapshot> getConfigsOptional(long leastGeneration, boolean isInitializing) { + long newestComponentGeneration = componentSubscriber.waitNextGeneration(isInitializing); log.log(FINE, "getConfigsOptional: new component generation: " + newestComponentGeneration); // leastGeneration is only used to ensure newer generation when the previous generation was invalidated due to an exception if (newestComponentGeneration < leastGeneration) { return Optional.empty(); } else if (bootstrapSubscriber.generation() < newestComponentGeneration) { - long newestBootstrapGeneration = bootstrapSubscriber.waitNextGeneration(); + long newestBootstrapGeneration = bootstrapSubscriber.waitNextGeneration(isInitializing); log.log(FINE, "getConfigsOptional: new bootstrap generation: " + bootstrapSubscriber.generation()); Optional<ConfigSnapshot> bootstrapConfig = bootstrapConfigIfChanged(); if (bootstrapConfig.isPresent()) { @@ -92,8 +92,8 @@ public final class ConfigRetriever { return componentsConfigIfChanged(); } else { // This should not be a normal case, and hence a warning to allow investigation. - log.warning("Did not get same generation for bootstrap (" + newestBootstrapGeneration + ") and components configs (" - + newestComponentGeneration + ")."); + log.warning("Did not get same generation for bootstrap (" + newestBootstrapGeneration + + ") and components configs (" + newestComponentGeneration + ")."); return Optional.empty(); } } diff --git a/container-di/src/main/java/com/yahoo/container/di/Container.java b/container-di/src/main/java/com/yahoo/container/di/Container.java index 7855cd6b2f1..82c7f65bc2a 100644 --- a/container-di/src/main/java/com/yahoo/container/di/Container.java +++ b/container-di/src/main/java/com/yahoo/container/di/Container.java @@ -44,9 +44,9 @@ public class Container { private static final Logger log = Logger.getLogger(Container.class.getName()); private final SubscriberFactory subscriberFactory; - private ConfigKey<ApplicationBundlesConfig> applicationBundlesConfigKey; - private ConfigKey<PlatformBundlesConfig> platformBundlesConfigKey; - private ConfigKey<ComponentsConfig> componentsConfigKey; + private final ConfigKey<ApplicationBundlesConfig> applicationBundlesConfigKey; + private final ConfigKey<PlatformBundlesConfig> platformBundlesConfigKey; + private final ConfigKey<ComponentsConfig> componentsConfigKey; private final ComponentDeconstructor componentDeconstructor; private final Osgi osgi; @@ -72,10 +72,10 @@ public class Container { }); } - public ComponentGraph getNewComponentGraph(ComponentGraph oldGraph, Injector fallbackInjector) { + public ComponentGraph getNewComponentGraph(ComponentGraph oldGraph, Injector fallbackInjector, boolean isInitializing) { try { Collection<Bundle> obsoleteBundles = new HashSet<>(); - ComponentGraph newGraph = getConfigAndCreateGraph(oldGraph, fallbackInjector, obsoleteBundles); + ComponentGraph newGraph = getConfigAndCreateGraph(oldGraph, fallbackInjector, isInitializing, obsoleteBundles); newGraph.reuseNodes(oldGraph); constructComponents(newGraph); deconstructObsoleteComponents(oldGraph, newGraph, obsoleteBundles); @@ -88,11 +88,12 @@ public class Container { private ComponentGraph getConfigAndCreateGraph(ComponentGraph graph, Injector fallbackInjector, + boolean isInitializing, Collection<Bundle> obsoleteBundles) // NOTE: Return value { ConfigSnapshot snapshot; while (true) { - snapshot = configurer.getConfigs(graph.configKeys(), leastGeneration); + snapshot = configurer.getConfigs(graph.configKeys(), leastGeneration, isInitializing); log.log(FINE, String.format("createNewGraph:\n" + "graph.configKeys = %s\n" + "graph.generation = %s\n" + "snapshot = %s\n", graph.configKeys(), graph.generation(), snapshot)); diff --git a/container-di/src/main/java/com/yahoo/container/di/config/Subscriber.java b/container-di/src/main/java/com/yahoo/container/di/config/Subscriber.java index 9fd30f888b9..60207447bfd 100644 --- a/container-di/src/main/java/com/yahoo/container/di/config/Subscriber.java +++ b/container-di/src/main/java/com/yahoo/container/di/config/Subscriber.java @@ -12,7 +12,7 @@ import java.util.Map; */ public interface Subscriber { - long waitNextGeneration(); + long waitNextGeneration(boolean isInitializing); long generation(); boolean configChanged(); |