summaryrefslogtreecommitdiffstats
path: root/container-disc
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-06-09 18:11:40 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-06-09 18:11:40 +0200
commit8ae2cbaa96d22ff52c9b42e6935dfa07c0b69ff3 (patch)
tree029f19ddca4307a1fa67ab34b3aa03bbb329a511 /container-disc
parentf6a018c3a61dfd593393a66270481406adf5589a (diff)
Watch and die on port change.
Diffstat (limited to 'container-disc')
-rw-r--r--container-disc/src/main/java/com/yahoo/container/jdisc/ConfiguredApplication.java27
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);