From a5e211efdb92d00ad19740e0fb74f316dd84ee78 Mon Sep 17 00:00:00 2001 From: jonmv Date: Tue, 11 Oct 2022 10:55:30 +0200 Subject: Handle shutdown in different thread --- .../com/yahoo/vespa/curator/SingletonManager.java | 19 ++++++++++++++++--- 1 file 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 { -- cgit v1.2.3