diff options
author | Harald Musum <musum@verizonmedia.com> | 2019-09-02 09:57:41 +0200 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2019-09-02 09:57:41 +0200 |
commit | ac1ed8ae40b48c85e3f44d8fa3ef8a0070fffc11 (patch) | |
tree | 518b7332fb84f66351e1aa2e6fe633246fcb0dac /container-disc | |
parent | 79ad6c8fa853eba080e9e9ead89fd98afca6a572 (diff) |
Do not use a slobrok config subscriber when using standalone container
Diffstat (limited to 'container-disc')
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java | 29 |
1 files changed, 24 insertions, 5 deletions
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 e2eb664c8a5..b8dd46d273a 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 @@ -4,6 +4,7 @@ package com.yahoo.container.jdisc; import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Injector; +import com.yahoo.cloud.config.SlobroksConfig; import com.yahoo.component.provider.ComponentRegistry; import com.yahoo.concurrent.DaemonThreadFactory; import com.yahoo.config.ConfigInstance; @@ -12,6 +13,7 @@ import com.yahoo.container.Container; import com.yahoo.container.QrConfig; import com.yahoo.container.core.ChainsConfig; import com.yahoo.container.core.config.HandlersConfigurerDi; +import com.yahoo.container.di.CloudSubscriberFactory; import com.yahoo.container.di.config.Subscriber; import com.yahoo.container.di.config.SubscriberFactory; import com.yahoo.container.http.filter.FilterChainRepository; @@ -47,6 +49,7 @@ import java.util.HashSet; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.WeakHashMap; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -79,7 +82,7 @@ public final class ConfiguredApplication implements Application { private final String configId; private final OsgiFramework osgiFramework; private final com.yahoo.jdisc.Timer timerSingleton; - private final SlobrokConfigSubscriber slobrokConfigSubscriber; + private final Optional<SlobrokConfigSubscriber> slobrokConfigSubscriber; private final SessionCache sessionCache; //TODO: FilterChainRepository should instead always be set up in the model. @@ -126,7 +129,9 @@ public final class ConfiguredApplication implements Application { this.timerSingleton = timer; this.subscriberFactory = subscriberFactory; this.configId = System.getProperty("config.id"); - this.slobrokConfigSubscriber = new SlobrokConfigSubscriber(configId); + this.slobrokConfigSubscriber = (subscriberFactory instanceof CloudSubscriberFactory) + ? Optional.of(new SlobrokConfigSubscriber(configId)) + : Optional.empty(); this.sessionCache = new SessionCache(configId); this.restrictedOsgiFramework = new DisableOsgiFramework(new RestrictedBundleContext(osgiFramework.bundleContext())); } @@ -134,7 +139,7 @@ public final class ConfiguredApplication implements Application { @Override public void start() { qrConfig = getConfig(QrConfig.class); - slobrokRegistrator = registerInSlobrok(slobrokConfigSubscriber, qrConfig); + slobrokRegistrator = registerInSlobrok(qrConfig); hackToInitializeServer(qrConfig); @@ -151,7 +156,7 @@ public final class ConfiguredApplication implements Application { * The container has no rpc methods, but we still need an RPC sever * to register in Slobrok to enable orchestration */ - private Register registerInSlobrok(SlobrokConfigSubscriber slobrokConfigSubscriber, QrConfig qrConfig) { + private Register registerInSlobrok(QrConfig qrConfig) { if ( ! qrConfig.rpc().enabled()) return null; // 1. Set up RPC server @@ -165,7 +170,7 @@ public final class ConfiguredApplication implements Application { } // 2. Register it in slobrok - SlobrokList slobrokList = slobrokConfigSubscriber.getSlobroks(); + SlobrokList slobrokList = getSlobrokList(); Spec mySpec = new Spec(HostName.getLocalhost(), acceptor.port()); slobrokRegistrator = new Register(supervisor, slobrokList, mySpec); slobrokRegistrator.registerName(qrConfig.rpc().slobrokId()); @@ -174,6 +179,20 @@ public final class ConfiguredApplication implements Application { return slobrokRegistrator; } + // Different ways of getting slobrok config depending on whether we have a subscriber (regular setup) + // or need to get the config directly (standalone container) + private SlobrokList getSlobrokList() { + SlobrokList slobrokList; + if (slobrokConfigSubscriber.isPresent()) { + slobrokList = slobrokConfigSubscriber.get().getSlobroks(); + } else { + slobrokList = new SlobrokList(); + SlobroksConfig slobrokConfig = getConfig(SlobroksConfig.class); + slobrokList.setup(slobrokConfig.slobrok().stream().map(SlobroksConfig.Slobrok::connectionspec).toArray(String[]::new)); + } + return slobrokList; + } + private void unregisterInSlobrok() { if (slobrokRegistrator != null) slobrokRegistrator.shutdown(); |