diff options
author | jonmv <venstad@gmail.com> | 2022-10-11 10:55:30 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-10-11 10:55:30 +0200 |
commit | a5e211efdb92d00ad19740e0fb74f316dd84ee78 (patch) | |
tree | 863b68e67b538a2e536aff01a46b4b9e89fd4cc1 | |
parent | 37d63d09b71333401849662f5642123d2ae8f9ce (diff) |
Handle shutdown in different thread
-rw-r--r-- | zkfacade/src/main/java/com/yahoo/vespa/curator/SingletonManager.java | 19 |
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 { |