summaryrefslogtreecommitdiffstats
path: root/container-disc
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-12-01 09:07:49 -0800
committerJon Bratseth <bratseth@oath.com>2018-12-01 09:07:49 -0800
commit08ca40bdeabdebebf1e1a86b75bea3f4ffd2a235 (patch)
tree6304a6a46750854ecb7972de7c821c768220934c /container-disc
parent83108df45e6f9c635771a2cad7fd7cd296b9f799 (diff)
Register the container with Slobrok
This allows us to orchestrate restarts.
Diffstat (limited to 'container-disc')
-rw-r--r--container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java28
1 files changed, 27 insertions, 1 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 27defe08fa8..f16fd0ed2a3 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
@@ -5,6 +5,7 @@ import com.google.common.collect.MapMaker;
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;
@@ -29,8 +30,14 @@ import com.yahoo.jdisc.handler.RequestHandler;
import com.yahoo.jdisc.service.ClientProvider;
import com.yahoo.jdisc.service.ServerProvider;
import com.yahoo.jrt.ListenFailedException;
+import com.yahoo.jrt.Spec;
+import com.yahoo.jrt.Supervisor;
+import com.yahoo.jrt.Transport;
+import com.yahoo.jrt.slobrok.api.Register;
+import com.yahoo.jrt.slobrok.api.SlobrokList;
import com.yahoo.log.LogLevel;
import com.yahoo.log.LogSetup;
+import com.yahoo.net.HostName;
import com.yahoo.osgi.OsgiImpl;
import com.yahoo.vespa.config.ConfigKey;
import com.yahoo.yolean.Exceptions;
@@ -72,6 +79,8 @@ public final class ConfiguredApplication implements Application {
private final ContainerDiscApplication applicationWithLegacySetup;
private final OsgiFramework osgiFramework;
private final com.yahoo.jdisc.Timer timerSingleton;
+ private final Register slobrokRegistrator;
+
//TODO: FilterChainRepository should instead always be set up in the model.
private final FilterChainRepository defaultFilterChainRepository =
new FilterChainRepository(new ChainsConfig(new ChainsConfig.Builder()),
@@ -106,7 +115,9 @@ public final class ConfiguredApplication implements Application {
public ConfiguredApplication(ContainerActivator activator,
OsgiFramework osgiFramework,
com.yahoo.jdisc.Timer timer,
- SubscriberFactory subscriberFactory) throws ListenFailedException {
+ SubscriberFactory subscriberFactory,
+ SlobroksConfig slobroksConfig,
+ QrConfig qrConfig) throws ListenFailedException {
this.activator = activator;
this.osgiFramework = osgiFramework;
this.timerSingleton = timer;
@@ -116,6 +127,20 @@ public final class ConfiguredApplication implements Application {
Container.get().setOsgi(new OsgiImpl(osgiFramework));
applicationWithLegacySetup = new ContainerDiscApplication(configId);
+
+ slobrokRegistrator = registerInSlobrok(slobroksConfig, qrConfig);
+ }
+
+ /** The container has no rpc methods, but we still need to register it in Slobrok to enable orchestration */
+ private Register registerInSlobrok(SlobroksConfig slobrokConfig, QrConfig qrConfig) {
+ SlobrokList slobrokList = new SlobrokList();
+ slobrokList.setup(slobrokConfig.slobrok().stream().map(SlobroksConfig.Slobrok::connectionspec).toArray(String[]::new));
+ Spec mySpec = new Spec(HostName.getLocalhost(), qrConfig.rpc().port());
+ Register slobrokRegistrator = new Register(new Supervisor(new Transport()), slobrokList, mySpec);
+ slobrokRegistrator.registerName(qrConfig.rpc().slobrokId());
+ log.log(LogLevel.INFO,
+ "Registered name '" + qrConfig.rpc().slobrokId() + "' at " + mySpec + " with: " + slobrokList);
+ return slobrokRegistrator;
}
@Override
@@ -293,6 +318,7 @@ public final class ConfiguredApplication implements Application {
log.info("Stop: Shutting container down");
configurer.shutdown(new Deconstructor(false));
Container.get().shutdown();
+ slobrokRegistrator.shutdown();
log.info("Stop: Finished");
}