summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorHaakon Dybdahl <dybdahl@yahoo-inc.com>2016-07-05 12:59:22 +0200
committerHaakon Dybdahl <dybdahl@yahoo-inc.com>2016-07-05 12:59:22 +0200
commit30362eebc220ffd7db901fbb52dd4a3805b1f146 (patch)
treef9bcfa39df6c69fd4541995836952cd8c00d44a8 /node-admin
parent983dd5714698d929a14a124cc1de3e4039a7ef0c (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.java25
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");