summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/cluster
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-08-16 14:31:20 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-08-16 14:31:20 +0200
commit9dab52cdfc1d679629046899c85a6b5139ab5945 (patch)
tree90e850697f00f5f902ff1a2b5c11d4492c531ceb /container-search/src/main/java/com/yahoo/search/cluster
parente32d551e91700add8758cf57d9b91f7624c2bd3a (diff)
Only use direct dispatch when the local node is responding
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/cluster')
-rw-r--r--container-search/src/main/java/com/yahoo/search/cluster/BaseNodeMonitor.java3
-rw-r--r--container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java37
-rw-r--r--container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java9
-rw-r--r--container-search/src/main/java/com/yahoo/search/cluster/NodeManager.java11
-rw-r--r--container-search/src/main/java/com/yahoo/search/cluster/TrafficNodeMonitor.java21
5 files changed, 43 insertions, 38 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/cluster/BaseNodeMonitor.java b/container-search/src/main/java/com/yahoo/search/cluster/BaseNodeMonitor.java
index de67369a231..9aafdb8b236 100644
--- a/container-search/src/main/java/com/yahoo/search/cluster/BaseNodeMonitor.java
+++ b/container-search/src/main/java/com/yahoo/search/cluster/BaseNodeMonitor.java
@@ -21,7 +21,7 @@ import com.yahoo.search.result.ErrorMessage;
*/
public abstract class BaseNodeMonitor<T> {
- protected static Logger log=Logger.getLogger(BaseNodeMonitor.class.getName());
+ protected static Logger log = Logger.getLogger(BaseNodeMonitor.class.getName());
/** The object representing the monitored node */
protected T node;
@@ -90,4 +90,5 @@ public abstract class BaseNodeMonitor<T> {
/** Returns whether or not this is monitoring an internal node. Default is false. */
public boolean isInternal() { return internal; }
+
}
diff --git a/container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java b/container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java
index 619beb0a8d1..2ccb57c6e83 100644
--- a/container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java
+++ b/container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java
@@ -24,7 +24,7 @@ import java.util.logging.Logger;
*/
public class ClusterMonitor<T> {
- private MonitorConfiguration configuration=new MonitorConfiguration();
+ private MonitorConfiguration configuration = new MonitorConfiguration();
private static Logger log=Logger.getLogger(ClusterMonitor.class.getName());
@@ -35,14 +35,18 @@ public class ClusterMonitor<T> {
private volatile boolean shutdown = false;
/** A map from Node to corresponding MonitoredNode */
- private Map<T,BaseNodeMonitor<T>> nodeMonitors=
- Collections.synchronizedMap(new java.util.LinkedHashMap<T, BaseNodeMonitor<T>>());
+ private Map<T, BaseNodeMonitor<T>> nodeMonitors = Collections.synchronizedMap(new java.util.LinkedHashMap<>());
- public ClusterMonitor(NodeManager<T> manager, String monitorConfigID) {
- nodeManager=manager;
- monitorThread=new MonitorThread("search.clustermonitor");
+ /** @deprecated use the constructor with just the first argument instead */
+ @Deprecated
+ public ClusterMonitor(NodeManager<T> manager, String ignored) {
+ this(manager);
+ }
+
+ public ClusterMonitor(NodeManager<T> manager) {
+ nodeManager = manager;
+ monitorThread = new MonitorThread("search.clustermonitor");
monitorThread.start();
- log.fine("checkInterval is " + configuration.getCheckInterval()+" ms");
}
/** Returns the configuration of this cluster monitor */
@@ -59,10 +63,9 @@ public class ClusterMonitor<T> {
* @param node the object representing the node
* @param internal whether or not this node is internal to this cluster
*/
- public void add(T node,boolean internal) {
- BaseNodeMonitor<T> monitor=new TrafficNodeMonitor<>(node,configuration,internal);
- // BaseNodeMonitor monitor=new NodeMonitor(node,configuration);
- nodeMonitors.put(node,monitor);
+ public void add(T node, boolean internal) {
+ BaseNodeMonitor<T> monitor = new TrafficNodeMonitor<>(node, configuration, internal);
+ nodeMonitors.put(node, monitor);
}
/**
@@ -74,8 +77,8 @@ public class ClusterMonitor<T> {
/** Called from ClusterSearcher/NodeManager when a node failed */
public synchronized void failed(T node, ErrorMessage error) {
- BaseNodeMonitor<T> monitor=nodeMonitors.get(node);
- boolean wasWorking=monitor.isWorking();
+ BaseNodeMonitor<T> monitor = nodeMonitors.get(node);
+ boolean wasWorking = monitor.isWorking();
monitor.failed(error);
if (wasWorking && !monitor.isWorking()) {
nodeManager.failed(node);
@@ -85,7 +88,7 @@ public class ClusterMonitor<T> {
/** Called when a node responded */
public synchronized void responded(T node) {
BaseNodeMonitor<T> monitor = nodeMonitors.get(node);
- boolean wasFailing=!monitor.isWorking();
+ boolean wasFailing =! monitor.isWorking();
monitor.responded();
if (wasFailing && monitor.isWorking()) {
nodeManager.working(monitor.getNode());
@@ -96,11 +99,9 @@ public class ClusterMonitor<T> {
* Ping all nodes which needs pinging to discover state changes
*/
public void ping(Executor executor) {
- for (Iterator<BaseNodeMonitor<T>> i=nodeMonitorIterator(); i.hasNext(); ) {
+ for (Iterator<BaseNodeMonitor<T>> i = nodeMonitorIterator(); i.hasNext(); ) {
BaseNodeMonitor<T> monitor= i.next();
- // always ping
- // if (monitor.isIdle())
- nodeManager.ping(monitor.getNode(),executor); // Cause call to failed or responded
+ nodeManager.ping(monitor.getNode(), executor); // Cause call to failed or responded
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java b/container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java
index 893d6193bef..d5ab94e7ec1 100644
--- a/container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/cluster/ClusterSearcher.java
@@ -3,9 +3,11 @@ package com.yahoo.search.cluster;
import com.yahoo.component.ComponentId;
import com.yahoo.container.protect.Error;
+import com.yahoo.fs4.mplex.Backend;
import com.yahoo.log.LogLevel;
import com.yahoo.prelude.Ping;
import com.yahoo.prelude.Pong;
+import com.yahoo.prelude.fastsearch.FastSearcher;
import com.yahoo.yolean.Exceptions;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
@@ -31,12 +33,12 @@ import java.util.concurrent.*;
* The connection objects should implement a good toString to ease diagnostics.
*
* @author bratseth
- * @author <a href="mailto:arnebef@yahoo-inc.com">Arne Bergene Fossaa</a>
+ * @author Arne Bergene Fossaa
*/
public abstract class ClusterSearcher<T> extends PingableSearcher implements NodeManager<T> {
private final Hasher<T> hasher;
- private final ClusterMonitor<T> monitor = new ClusterMonitor<>(this, "dummy");
+ private final ClusterMonitor<T> monitor = new ClusterMonitor<>(this);
/**
* Creates a new cluster searcher
@@ -59,7 +61,7 @@ public abstract class ClusterSearcher<T> extends PingableSearcher implements Nod
}
/**
- * Pinging a node by sending a query NodeManager method, called from ClusterMonitor
+ * Pinging a node, called from ClusterMonitor
*/
@Override
public final void ping(T p, Executor executor) {
@@ -344,4 +346,5 @@ public abstract class ClusterSearcher<T> extends PingableSearcher implements Nod
}
}
+
}
diff --git a/container-search/src/main/java/com/yahoo/search/cluster/NodeManager.java b/container-search/src/main/java/com/yahoo/search/cluster/NodeManager.java
index ce221fa1479..25582e43f5e 100644
--- a/container-search/src/main/java/com/yahoo/search/cluster/NodeManager.java
+++ b/container-search/src/main/java/com/yahoo/search/cluster/NodeManager.java
@@ -12,12 +12,15 @@ import java.util.concurrent.Executor;
public interface NodeManager<T> {
/** Called when a failed node is working (ready for production) again */
- public void working(T node);
+ void working(T node);
/** Called when a working node fails */
- public void failed(T node);
+ void failed(T node);
- /** Called when a node should be pinged */
- public void ping(T node, Executor executor);
+ /**
+ * Called when a node should be pinged.
+ * This *must* lead to either a call to NodeMonitor.failed or NodeMonitor.responded
+ */
+ void ping(T node, Executor executor);
}
diff --git a/container-search/src/main/java/com/yahoo/search/cluster/TrafficNodeMonitor.java b/container-search/src/main/java/com/yahoo/search/cluster/TrafficNodeMonitor.java
index 6464f0101be..7681ae89f18 100644
--- a/container-search/src/main/java/com/yahoo/search/cluster/TrafficNodeMonitor.java
+++ b/container-search/src/main/java/com/yahoo/search/cluster/TrafficNodeMonitor.java
@@ -3,7 +3,6 @@ package com.yahoo.search.cluster;
import com.yahoo.search.result.ErrorMessage;
-
/**
* This node monitor is responsible for maintaining the state of a monitored node.
* It has the following properties:
@@ -12,16 +11,15 @@ import com.yahoo.search.result.ErrorMessage;
* <li>A node is put back in operation when it responds correctly again
* </ul>
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
*/
public class TrafficNodeMonitor<T> extends BaseNodeMonitor<T> {
- /**
- * Creates a new node monitor for a node
- */
- public TrafficNodeMonitor(T node,MonitorConfiguration configuration,boolean internal) {
+
+ /** Creates a new node monitor for a node */
+ public TrafficNodeMonitor(T node, MonitorConfiguration configuration, boolean internal) {
super(internal);
- this.node=node;
- this.configuration=configuration;
+ this.node = node;
+ this.configuration = configuration;
}
/** Whether or not this has ever responded successfully */
@@ -32,11 +30,11 @@ public class TrafficNodeMonitor<T> extends BaseNodeMonitor<T> {
/**
* Called when this node fails.
*
- * @param error A container which should contain a short description
+ * @param error a container which should contain a short description
*/
@Override
public void failed(ErrorMessage error) {
- respondedAt=now();
+ respondedAt = now();
switch (error.getCode()) {
// TODO: Remove hard coded error messages.
@@ -63,9 +61,8 @@ public class TrafficNodeMonitor<T> extends BaseNodeMonitor<T> {
succeededAt=respondedAt;
atStartUp = false;
- if (!isWorking) {
+ if (!isWorking)
setWorking(true,"Responds correctly");
- }
}
/** Thread-safely changes the state of this node if required */