aboutsummaryrefslogtreecommitdiffstats
path: root/zkfacade
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-10-11 10:55:30 +0200
committerjonmv <venstad@gmail.com>2022-10-11 10:55:30 +0200
commita5e211efdb92d00ad19740e0fb74f316dd84ee78 (patch)
tree863b68e67b538a2e536aff01a46b4b9e89fd4cc1 /zkfacade
parent37d63d09b71333401849662f5642123d2ae8f9ce (diff)
Handle shutdown in different thread
Diffstat (limited to 'zkfacade')
-rw-r--r--zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java19
1 files changed, 16 insertions, 3 deletions
diff --git a/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java b/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
index ef8759b2bbc..3186c56b002 100644
--- a/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
+++ b/zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java
@@ -176,6 +176,7 @@ class SingletonManager {
}
}
}
+ unlock();
}
catch (Throwable t) {
Process.logAndDie(worker + " can't continue, shutting down", t);
@@ -327,12 +328,24 @@ class SingletonManager {
}
void shutdown() {
- assert Thread.currentThread() == worker : "shutdown should be run in the worker thread";
if ( ! shutdown.compareAndSet(false, true)) {
logger.log(Level.WARNING, "Shutdown called more than once on " + this);
}
- unlock();
- for (Task task : tasks) task.future.cancel(true);
+ if (Thread.currentThread() != worker) {
+ try {
+ worker.join();
+ }
+ catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ }
+ else {
+ unlock();
+ }
+ if ( ! tasks.isEmpty()) {
+ logger.log(Level.WARNING, "Non-empty task list after shutdown: " + tasks.size() + " remaining");
+ for (Task task : tasks) task.future.cancel(true); // Shouldn't happen.
+ }
}
private class MetricHelper {