diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-12-02 07:06:24 -0800 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-12-02 07:06:24 -0800 |
commit | 7b627ac684550eb7408dbdc7d1f6acc90dd77d49 (patch) | |
tree | abcbe50543bae3699ef05f5c42c7e5ea11688960 | |
parent | 4d45743e389a03777ad5120745740cf2a7327efd (diff) |
Listen to the RPC port
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java | 43 |
1 files changed, 35 insertions, 8 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 8ab39ca8166..3af7dcce3e0 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 @@ -29,6 +29,7 @@ import com.yahoo.jdisc.application.OsgiFramework; import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.service.ClientProvider; import com.yahoo.jdisc.service.ServerProvider; +import com.yahoo.jrt.Acceptor; import com.yahoo.jrt.ListenFailedException; import com.yahoo.jrt.Spec; import com.yahoo.jrt.Supervisor; @@ -94,7 +95,10 @@ public final class ConfiguredApplication implements Application { private Thread reconfigurerThread; private Thread portWatcher; private QrConfig qrConfig; + private Register slobrokRegistrator = null; + private Supervisor supervisor = null; + private Acceptor acceptor = null; static { LogSetup.initVespaLogging("Container"); @@ -145,18 +149,43 @@ public final class ConfiguredApplication implements Application { portWatcher.start(); } - /** The container has no rpc methods, but we still need to register it in Slobrok to enable orchestration */ + /** + * The container has no rpc methods, but we still need an RPC sever + * to register in Slobrok to enable orchestration + */ private Register registerInSlobrok(SlobroksConfig slobrokConfig, QrConfig qrConfig) { + if ( ! qrConfig.rpc().enabled()) return null; + + // 1. Set up RPC server + supervisor = new Supervisor(new Transport()); + Spec listenSpec = new Spec(qrConfig.rpc().port()); + try { + acceptor = supervisor.listen(listenSpec); + } + catch (ListenFailedException e) { + throw new RuntimeException("Could not create rpc server listening on " + listenSpec, e); + } + + // 2. Register it in slobrok 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); + Spec mySpec = new Spec(HostName.getLocalhost(), acceptor.port()); + slobrokRegistrator = new Register(supervisor, slobrokList, mySpec); slobrokRegistrator.registerName(qrConfig.rpc().slobrokId()); - log.log(LogLevel.INFO, - "Registered name '" + qrConfig.rpc().slobrokId() + "' at " + mySpec + " with: " + slobrokList); + log.log(LogLevel.INFO, "Registered name '" + qrConfig.rpc().slobrokId() + + "' at " + mySpec + " with: " + slobrokList); return slobrokRegistrator; } + private void unregisterInSlobrok() { + if (slobrokRegistrator != null) + slobrokRegistrator.shutdown(); + if (acceptor != null) + acceptor.shutdown().join(); + if (supervisor != null) + supervisor.transport().shutdown().join(); + } + @SuppressWarnings("deprecation") private static void hackToInitializeServer(QrConfig config) { try { @@ -318,9 +347,7 @@ public final class ConfiguredApplication implements Application { configurer.shutdown(new Deconstructor(false)); Container.get().shutdown(); - if (slobrokRegistrator != null) - slobrokRegistrator.shutdown(); - + unregisterInSlobrok(); log.info("Stop: Finished"); } |