summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/cluster/ClusterMonitor.java29
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java6
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/cluster/NodeMonitor.java21
3 files changed, 33 insertions, 23 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterMonitor.java b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterMonitor.java
index 22890f781fe..4e708e32a2d 100644
--- a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterMonitor.java
+++ b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterMonitor.java
@@ -37,6 +37,7 @@ public class ClusterMonitor implements Runnable, Freezable {
/** A map from Node to corresponding MonitoredNode */
private final Map<VespaBackEndSearcher, NodeMonitor> nodeMonitors = new java.util.IdentityHashMap<>();
+
private ScheduledFuture<?> future;
private boolean isFrozen = false;
@@ -96,21 +97,31 @@ public class ClusterMonitor implements Runnable, Freezable {
private void updateVipStatus() {
if ( ! vipStatus.isPresent()) return;
+ if ( ! hasInformationAboutAllNodes()) return;
- boolean hasWorkingNodesWithDocumentsOnline = false;
- for (NodeMonitor node : nodeMonitors.values()) {
- if (node.isWorking() && node.searchNodesOnline()) {
- hasWorkingNodesWithDocumentsOnline = true;
- break;
- }
- }
- if (hasWorkingNodesWithDocumentsOnline) {
+ if (hasWorkingNodesWithDocumentsOnline()) {
vipStatus.get().addToRotation(this);
} else {
vipStatus.get().removeFromRotation(this);
}
}
+ private boolean hasInformationAboutAllNodes() {
+ for (NodeMonitor monitor : nodeMonitors.values()) {
+ if ( ! monitor.statusIsKnown())
+ return false;
+ }
+ return true;
+ }
+
+ private boolean hasWorkingNodesWithDocumentsOnline() {
+ for (NodeMonitor node : nodeMonitors.values()) {
+ if (node.isWorking() && node.searchNodesOnline())
+ return true;
+ }
+ return false;
+ }
+
/**
* Ping all nodes which needs pinging to discover state changes
*/
@@ -130,7 +141,7 @@ public class ClusterMonitor implements Runnable, Freezable {
}
}
- public void shutdown() throws InterruptedException {
+ public void shutdown() {
if (future != null) {
future.cancel(true);
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
index ca1afbd4171..89f58bc944b 100644
--- a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
@@ -591,11 +591,7 @@ public class ClusterSearcher extends Searcher {
@Override
public void deconstruct() {
- try {
- monitor.shutdown();
- } catch (final InterruptedException e) {
- Thread.currentThread().interrupt();
- }
+ monitor.shutdown();
}
ExecutorService getExecutor() {
diff --git a/container-search/src/main/java/com/yahoo/prelude/cluster/NodeMonitor.java b/container-search/src/main/java/com/yahoo/prelude/cluster/NodeMonitor.java
index b60aecc2e51..5ccaff0f198 100644
--- a/container-search/src/main/java/com/yahoo/prelude/cluster/NodeMonitor.java
+++ b/container-search/src/main/java/com/yahoo/prelude/cluster/NodeMonitor.java
@@ -52,7 +52,7 @@ public class NodeMonitor {
}
// Whether or not dispatch has ever responded successfully
- private boolean atStartUp = true;
+ private boolean statusIsKnown = false;
public VespaBackEndSearcher getNode() {
return node;
@@ -88,23 +88,26 @@ public class NodeMonitor {
this.searchNodesOnline = searchNodesOnline;
if (! isWorking)
setWorking(true, "Responds correctly");
- atStartUp = false;
+ statusIsKnown = true;
}
/** Changes the state of this node if required */
private void setWorking(boolean working, String explanation) {
if (isWorking == working) return; // Old news
- if (working && ! atStartUp)
- log.info("Putting " + node + " in service: " + explanation);
- else if (! atStartUp)
- log.info("Taking " + node + " out of service: " + explanation);
+ if (statusIsKnown) {
+ if (working)
+ log.info("Putting " + node + " in service: " + explanation);
+ else
+ log.info("Taking " + node + " out of service: " + explanation);
+ }
isWorking = working;
}
- boolean searchNodesOnline() {
- return searchNodesOnline;
- }
+ boolean searchNodesOnline() { return searchNodesOnline; }
+
+ /** Returns true if we have had enough time to determine the status of this node since creating the monitor */
+ boolean statusIsKnown() { return statusIsKnown; }
}