diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-06-09 19:20:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-09 19:20:44 +0200 |
commit | f4ebae6929f0d1821cc06b5e6a4e20ee0fd0bee0 (patch) | |
tree | 029f19ddca4307a1fa67ab34b3aa03bbb329a511 | |
parent | f6a018c3a61dfd593393a66270481406adf5589a (diff) | |
parent | 8ae2cbaa96d22ff52c9b42e6935dfa07c0b69ff3 (diff) |
Merge pull request #2698 from yahoo/balder/watch-for-port-change
Watch and die on port change.
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java | 27 |
1 files changed, 26 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 c1548775bf7..a113dc59943 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 @@ -83,6 +83,8 @@ public final class ConfiguredApplication implements Application { private HandlersConfigurerDi configurer; private ScheduledThreadPoolExecutor shutdownDeadlineExecutor; private Thread reconfigurerThread; + private Thread portWatcher; + private QrConfig qrConfig; static { LogSetup.initVespaLogging("Container"); @@ -116,13 +118,17 @@ public final class ConfiguredApplication implements Application { @Override public void start() { - ContainerDiscApplication.hackToInitializeServer(getConfig(QrConfig.class)); + qrConfig = getConfig(QrConfig.class); + ContainerDiscApplication.hackToInitializeServer(qrConfig); ContainerBuilder builder = createBuilderWithGuiceBindings(); configureComponents(builder.guiceModules().activate()); intitializeAndActivateContainer(builder); startReconfigurerThread(); + portWatcher = new Thread(this::watchPortChange); + portWatcher.setDaemon(true); + portWatcher.start(); } private <T extends ConfigInstance> T getConfig(Class<T> configClass) { @@ -136,6 +142,25 @@ public final class ConfiguredApplication implements Application { } } + void watchPortChange() { + Subscriber subscriber = subscriberFactory.getSubscriber(Collections.singleton(new ConfigKey<>(QrConfig.class, configId))); + try { + while (true) { + subscriber.waitNextGeneration(); + QrConfig newConfig = QrConfig.class.cast(first(subscriber.config().values())); + if (qrConfig.rpc().port() != newConfig.rpc().port()) { + com.yahoo.protect.Process.logAndDie( + "Rpc port config has changed from " + + qrConfig.rpc().port() + " to " + newConfig.rpc().port() + + ". This we can not handle without a restart so we will just bail out."); + } + log.info("Received new QrConfig :" + newConfig); + } + } finally { + subscriber.close(); + } + } + private void intitializeAndActivateContainer(ContainerBuilder builder) { addHandlerBindings(builder, Container.get().getRequestHandlerRegistry(), configurer.getComponent(ApplicationContext.class).discBindingsConfig); |