diff options
author | Haakon Dybdahl <dybdahl@yahoo-inc.com> | 2016-07-05 12:59:22 +0200 |
---|---|---|
committer | Haakon Dybdahl <dybdahl@yahoo-inc.com> | 2016-07-05 12:59:22 +0200 |
commit | 30362eebc220ffd7db901fbb52dd4a3805b1f146 (patch) | |
tree | f9bcfa39df6c69fd4541995836952cd8c00d44a8 /node-admin | |
parent | 983dd5714698d929a14a124cc1de3e4039a7ef0c (diff) |
Fix sync issue.
Diffstat (limited to 'node-admin')
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java index 9ec9d455cc4..175de8706cb 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java @@ -9,6 +9,8 @@ import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepository; import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator; import java.io.IOException; +import java.time.Duration; +import java.time.Instant; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Level; @@ -27,8 +29,8 @@ public class NodeAgentImpl implements NodeAgent { private AtomicBoolean isFrozen = new AtomicBoolean(false); private AtomicBoolean wantFrozen = new AtomicBoolean(false); private AtomicBoolean terminated = new AtomicBoolean(false); - private AtomicBoolean workToDoNow = new AtomicBoolean(true); + private boolean workToDoNow = true; private static final Logger logger = Logger.getLogger(NodeAgentImpl.class.getName()); @@ -183,25 +185,28 @@ public class NodeAgentImpl implements NodeAgent { @Override public void signalWorkToBeDone() { - workToDoNow.set(true); synchronized (monitor) { + workToDoNow = true; monitor.notifyAll(); } } private void loop() { while (! terminated.get()) { - if (! workToDoNow.get()) { - try { - synchronized (monitor) { - monitor.wait(delaysBetweenEachTickMillis); + try { + synchronized (monitor) { + long waittimeLeft = delaysBetweenEachTickMillis; + while (waittimeLeft > 1 && !workToDoNow) { + Instant start = Instant.now(); + monitor.wait(waittimeLeft); + waittimeLeft -= Duration.between(start, Instant.now()).toMillis(); } - } catch (InterruptedException e) { - logger.severe("Interrupted, but ignoring this: " + hostname); - continue; + workToDoNow = false; } + } catch (InterruptedException e) { + logger.severe("Interrupted, but ignoring this: " + hostname); + continue; } - workToDoNow.set(false); isFrozen.set(wantFrozen.get()); if (isFrozen.get()) { debugString.set(hostname + " frozen"); |