diff options
-rwxr-xr-x | config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java | 2 | ||||
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java | 28 |
2 files changed, 28 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java index d43defaeeb1..3d5f9dcfb59 100755 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java @@ -216,7 +216,7 @@ public final class ContainerCluster addComponent(new StatisticsComponent()); addSimpleComponent(AccessLog.class); - // TODO better modelling + // TODO: Better modelling addSimpleComponent(ThreadPoolProvider.class); addSimpleComponent(com.yahoo.concurrent.classlock.ClassLocking.class); addSimpleComponent("com.yahoo.jdisc.http.filter.SecurityFilterInvoker"); 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"); } |