diff options
-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); } } |