diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-07-26 15:29:45 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-07-26 15:29:45 +0200 |
commit | 93da61f4951b908409fb0dc76facf2c26ca9958a (patch) | |
tree | d5da0d709652cf146a2f167d0c70b778884b4f43 /jdisc_core/src/main/java/com | |
parent | 15295f6da5751a279cb06aaa99c42a1aaeea36a8 (diff) |
Make ContainerWatchdog restartable
Diffstat (limited to 'jdisc_core/src/main/java/com')
-rw-r--r-- | jdisc_core/src/main/java/com/yahoo/jdisc/core/ApplicationLoader.java | 1 | ||||
-rw-r--r-- | jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java | 18 |
2 files changed, 13 insertions, 6 deletions
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ApplicationLoader.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ApplicationLoader.java index dc6ee180321..cdde43bb3c2 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ApplicationLoader.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ApplicationLoader.java @@ -127,6 +127,7 @@ public class ApplicationLoader implements BootstrapLoader, ContainerActivator, C @Override public void start() throws Exception { log.finer("Initializing application."); + watchdog.start(); Injector injector = guiceModules.activate(); Application app; if (!appBundles.isEmpty()) { diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java index 592ed5f7c3c..f28d5ea2b26 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java @@ -48,7 +48,9 @@ class ContainerWatchdog implements ContainerWatchdogMetrics, AutoCloseable { private Instant currentContainerActivationTime; private int numStaleContainers; private Instant lastLogTime; - private ScheduledFuture<?> previousThreadMonitoringTask; + private ScheduledFuture<?> threadMonitoringTask; + private ScheduledFuture<?> containerMontoringTask; + ContainerWatchdog() { this(new ScheduledThreadPoolExecutor( @@ -65,7 +67,11 @@ class ContainerWatchdog implements ContainerWatchdogMetrics, AutoCloseable { this.scheduler = scheduler; this.clock = clock; this.lastLogTime = clock.instant(); - scheduler.scheduleAtFixedRate(this::monitorDeactivatedContainers, CONTAINER_CHECK_PERIOD.getSeconds(), CONTAINER_CHECK_PERIOD.getSeconds(), TimeUnit.SECONDS); + } + + void start() { + this.containerMontoringTask = scheduler.scheduleAtFixedRate(this::monitorDeactivatedContainers, + CONTAINER_CHECK_PERIOD.getSeconds(), CONTAINER_CHECK_PERIOD.getSeconds(), TimeUnit.SECONDS); } @Override @@ -79,8 +85,8 @@ class ContainerWatchdog implements ContainerWatchdogMetrics, AutoCloseable { @Override public void close() throws InterruptedException { - scheduler.shutdownNow(); - scheduler.awaitTermination(1, TimeUnit.MINUTES); + if (containerMontoringTask != null) containerMontoringTask.cancel(false); + if (threadMonitoringTask != null) threadMonitoringTask.cancel(false); synchronized (monitor) { deactivatedContainers.clear(); currentContainer = null; @@ -95,8 +101,8 @@ class ContainerWatchdog implements ContainerWatchdogMetrics, AutoCloseable { } currentContainer = nextContainer; currentContainerActivationTime = clock.instant(); - if (previousThreadMonitoringTask != null) previousThreadMonitoringTask.cancel(false); - previousThreadMonitoringTask = scheduler.schedule(this::monitorThreads, 1, TimeUnit.MINUTES); + if (threadMonitoringTask != null) threadMonitoringTask.cancel(false); + threadMonitoringTask = scheduler.schedule(this::monitorThreads, 1, TimeUnit.MINUTES); } } |