diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-02-04 06:16:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-04 06:16:08 +0100 |
commit | 17e572d4dad3c9e5040544072dbdc9f7a703e7bd (patch) | |
tree | dfef97d728612d467446f5279746986498f30dd6 /container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java | |
parent | f8939b597de071b5858652eccb5aa6e266295d1d (diff) | |
parent | 2f3caea439e8275b842cc97c8044e61ad4ce9ca0 (diff) |
Merge pull request #12056 from vespa-engine/balder/default-initializing
Default state is 'initializing', not 'up'.
Diffstat (limited to 'container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java')
-rw-r--r-- | container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java b/container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java index 0be9f47f6cf..faa08402cdc 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/state/StateMonitor.java @@ -14,6 +14,7 @@ import java.util.TreeSet; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; /** @@ -27,7 +28,7 @@ public class StateMonitor extends AbstractComponent { private final static Logger log = Logger.getLogger(StateMonitor.class.getName()); - public enum Status {up, down, initializing}; + public enum Status {up, down, initializing} private final CopyOnWriteArrayList<StateMetricConsumer> consumers = new CopyOnWriteArrayList<>(); private final Thread thread; @@ -37,6 +38,7 @@ public class StateMonitor extends AbstractComponent { private volatile MetricSnapshot snapshot; private volatile Status status; private final TreeSet<String> valueNames = new TreeSet<>(); + private final AtomicBoolean stopped = new AtomicBoolean(false); /** For testing */ public StateMonitor() { @@ -105,13 +107,13 @@ public class StateMonitor extends AbstractComponent { private void run() { log.finest("StateMonitor started."); try { - while (!Thread.interrupted()) { - checkTime(); - Thread.sleep((lastSnapshotTimeMs + snapshotIntervalMs) - timer.currentTimeMillis()); + synchronized (stopped) { + while (!stopped.get()) { + checkTime(); + stopped.wait((lastSnapshotTimeMs + snapshotIntervalMs) - timer.currentTimeMillis()); + } } - } catch (InterruptedException e) { - - } + } catch (InterruptedException e) { } log.finest("StateMonitor stopped."); } @@ -143,12 +145,13 @@ public class StateMonitor extends AbstractComponent { @Override public void deconstruct() { - thread.interrupt(); + synchronized (stopped) { + stopped.set(true); + stopped.notifyAll(); + } try { thread.join(5000); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } + } catch (InterruptedException e) { } if (thread.isAlive()) { log.warning("StateMonitor failed to terminate within 5 seconds of interrupt signal. Ignoring."); } |