summaryrefslogtreecommitdiffstats
path: root/jdisc_core
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2022-07-26 15:29:45 +0200
committerBjørn Christian Seime <bjorncs@yahooinc.com>2022-07-26 15:29:45 +0200
commit93da61f4951b908409fb0dc76facf2c26ca9958a (patch)
treed5da0d709652cf146a2f167d0c70b778884b4f43 /jdisc_core
parent15295f6da5751a279cb06aaa99c42a1aaeea36a8 (diff)
Make ContainerWatchdog restartable
Diffstat (limited to 'jdisc_core')
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/ApplicationLoader.java1
-rw-r--r--jdisc_core/src/main/java/com/yahoo/jdisc/core/ContainerWatchdog.java18
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);
}
}