diff options
7 files changed, 21 insertions, 18 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/di/CloudSubscriber.java b/container-core/src/main/java/com/yahoo/container/di/CloudSubscriber.java index 4efb36d4b29..9201ad2a528 100644 --- a/container-core/src/main/java/com/yahoo/container/di/CloudSubscriber.java +++ b/container-core/src/main/java/com/yahoo/container/di/CloudSubscriber.java @@ -24,13 +24,15 @@ import static java.util.logging.Level.FINE; public class CloudSubscriber implements Subscriber { private static final Logger log = Logger.getLogger(CloudSubscriber.class.getName()); + private final String name; private final ConfigSubscriber subscriber; private final Map<ConfigKey<ConfigInstance>, ConfigHandle<ConfigInstance>> handles = new HashMap<>(); // if waitNextGeneration has not yet been called, -1 should be returned private long generation = -1L; - CloudSubscriber(Set<ConfigKey<ConfigInstance>> keys, ConfigSource configSource) { + CloudSubscriber(String name, ConfigSource configSource, Set<ConfigKey<ConfigInstance>> keys) { + this.name = name; this.subscriber = new ConfigSubscriber(configSource); keys.forEach(k -> handles.put(k, subscriber.subscribe(k.getConfigClass(), k.getConfigId()))); } @@ -91,6 +93,11 @@ public class CloudSubscriber implements Subscriber { subscriber.close(); } + @Override + public String toString() { + return "CloudSubscriber{" + name + ", gen." + generation + "}"; + } + // TODO: Remove, only used by test specific code in CloudSubscriberFactory ConfigSubscriber getSubscriber() { return subscriber; diff --git a/container-core/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java b/container-core/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java index 38f7ded28f8..a6327b01e21 100644 --- a/container-core/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java +++ b/container-core/src/main/java/com/yahoo/container/di/CloudSubscriberFactory.java @@ -2,26 +2,19 @@ package com.yahoo.container.di; import com.yahoo.config.ConfigInstance; -import com.yahoo.config.subscription.ConfigHandle; import com.yahoo.config.subscription.ConfigSource; import com.yahoo.config.subscription.ConfigSourceSet; -import com.yahoo.config.subscription.ConfigSubscriber; import com.yahoo.container.di.config.Subscriber; import com.yahoo.container.di.config.SubscriberFactory; import com.yahoo.vespa.config.ConfigKey; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.WeakHashMap; -import java.util.logging.Level; -import java.util.logging.Logger; - -import static java.util.logging.Level.FINE; /** * @author Tony Vaagenes @@ -39,14 +32,14 @@ public class CloudSubscriberFactory implements SubscriberFactory { } @Override - public Subscriber getSubscriber(Set<? extends ConfigKey<?>> configKeys) { + public Subscriber getSubscriber(Set<? extends ConfigKey<?>> configKeys, String name) { Set<ConfigKey<ConfigInstance>> subscriptionKeys = new HashSet<>(); for(ConfigKey<?> key: configKeys) { @SuppressWarnings("unchecked") // ConfigKey is defined as <CONFIGCLASS extends ConfigInstance> ConfigKey<ConfigInstance> invariant = (ConfigKey<ConfigInstance>) key; subscriptionKeys.add(invariant); } - CloudSubscriber subscriber = new CloudSubscriber(subscriptionKeys, configSource); + CloudSubscriber subscriber = new CloudSubscriber(name, configSource, subscriptionKeys); testGeneration.ifPresent(subscriber.getSubscriber()::reload); // TODO: test specific code, remove activeSubscribers.put(subscriber, 0); 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 88167c73198..5554a5a804f 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 @@ -33,6 +33,7 @@ public final class ConfigRetriever { private final Subscriber bootstrapSubscriber; private Subscriber componentSubscriber; private final SubscriberFactory subscriberFactory; + private int componentSubscriberIndex; public ConfigRetriever(Set<ConfigKey<? extends ConfigInstance>> bootstrapKeys, SubscriberFactory subscriberFactory) { this.bootstrapKeys = bootstrapKeys; @@ -41,8 +42,8 @@ public final class ConfigRetriever { if (bootstrapKeys.isEmpty()) { throw new IllegalArgumentException("Bootstrap key set is empty"); } - this.bootstrapSubscriber = this.subscriberFactory.getSubscriber(bootstrapKeys); - this.componentSubscriber = this.subscriberFactory.getSubscriber(componentSubscriberKeys); + this.bootstrapSubscriber = this.subscriberFactory.getSubscriber(bootstrapKeys, "bootstrap"); + this.componentSubscriber = this.subscriberFactory.getSubscriber(componentSubscriberKeys, "component_" + ++componentSubscriberIndex); } public ConfigSnapshot getConfigs(Set<ConfigKey<? extends ConfigInstance>> componentConfigKeys, @@ -133,7 +134,7 @@ public final class ConfigRetriever { componentSubscriberKeys = keys; try { log.log(FINE, () -> "Setting up new component subscriber for keys: " + keys); - componentSubscriber = subscriberFactory.getSubscriber(keys); + componentSubscriber = subscriberFactory.getSubscriber(keys, "component_" + ++componentSubscriberIndex); } catch (Throwable e) { log.log(Level.WARNING, "Failed setting up subscriptions for component configs: " + e.getMessage()); log.log(Level.WARNING, "Config keys: " + keys); diff --git a/container-core/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java b/container-core/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java index 1bfd4344b90..f11f44413c7 100644 --- a/container-core/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java +++ b/container-core/src/main/java/com/yahoo/container/di/config/SubscriberFactory.java @@ -14,7 +14,7 @@ import java.util.Set; @ProvidedBy(CloudSubscriberFactory.Provider.class) public interface SubscriberFactory { - Subscriber getSubscriber(Set<? extends ConfigKey<?>> configKeys); + Subscriber getSubscriber(Set<? extends ConfigKey<?>> configKeys, String name); void reloadActiveSubscribers(long generation); } diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java b/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java index 219616500c8..099df79cd9b 100644 --- a/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java +++ b/container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java @@ -212,7 +212,8 @@ public final class ConfiguredApplication implements Application { } private <T extends ConfigInstance> T getConfig(Class<T> configClass, boolean isInitializing) { - Subscriber subscriber = subscriberFactory.getSubscriber(Collections.singleton(new ConfigKey<>(configClass, configId))); + Subscriber subscriber = subscriberFactory.getSubscriber(Collections.singleton(new ConfigKey<>(configClass, configId)), + configClass.getName()); try { subscriber.waitNextGeneration(isInitializing); return configClass.cast(first(subscriber.config().values())); @@ -222,7 +223,8 @@ public final class ConfiguredApplication implements Application { } private void watchPortChange() { - Subscriber subscriber = subscriberFactory.getSubscriber(Collections.singleton(new ConfigKey<>(QrConfig.class, configId))); + Subscriber subscriber = subscriberFactory.getSubscriber(Collections.singleton(new ConfigKey<>(QrConfig.class, configId)), + "portWatcher"); try { while (true) { subscriber.waitNextGeneration(false); diff --git a/standalone-container/src/main/java/com/yahoo/container/standalone/StandaloneSubscriberFactory.java b/standalone-container/src/main/java/com/yahoo/container/standalone/StandaloneSubscriberFactory.java index 8e8367cbe4c..d9db169ec54 100644 --- a/standalone-container/src/main/java/com/yahoo/container/standalone/StandaloneSubscriberFactory.java +++ b/standalone-container/src/main/java/com/yahoo/container/standalone/StandaloneSubscriberFactory.java @@ -83,7 +83,7 @@ public class StandaloneSubscriberFactory implements SubscriberFactory { @Override @SuppressWarnings("unchecked") - public Subscriber getSubscriber(Set<? extends ConfigKey<?>> configKeys) { + public Subscriber getSubscriber(Set<? extends ConfigKey<?>> configKeys, String name) { return new StandaloneSubscriber((Set<ConfigKey<ConfigInstance>>) configKeys); } diff --git a/standalone-container/src/test/java/com/yahoo/container/standalone/StandaloneSubscriberTest.java b/standalone-container/src/test/java/com/yahoo/container/standalone/StandaloneSubscriberTest.java index 76e3f9e6ec0..ecfc2caf722 100644 --- a/standalone-container/src/test/java/com/yahoo/container/standalone/StandaloneSubscriberTest.java +++ b/standalone-container/src/test/java/com/yahoo/container/standalone/StandaloneSubscriberTest.java @@ -39,7 +39,7 @@ public class StandaloneSubscriberTest { keys.add(platformBundlesKey); keys.add(applicationBundlesKey); keys.add(componentsKey); - Subscriber subscriber = new StandaloneSubscriberFactory(root).getSubscriber(keys); + Subscriber subscriber = new StandaloneSubscriberFactory(root).getSubscriber(keys, "standalone"); Map<ConfigKey<ConfigInstance>, ConfigInstance> config = subscriber.config(); assertEquals(2, config.size()); |