summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-09-19 10:19:07 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-09-19 10:19:07 +0200
commita6a3377aa89aa520bfe3a61bb76eaf4d6636388a (patch)
tree86bd9a3b82a4cc091745d4e72a385e2fd08095ef /container-search
parent818164cd7d79fa9885e9bc5215fd2ec845571182 (diff)
Minor cleanup, no functional changes
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java5
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/Group.java9
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/PingFactory.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java66
-rw-r--r--container-search/src/test/java/com/yahoo/search/dispatch/DispatcherTest.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/dispatch/MockSearchCluster.java2
6 files changed, 47 insertions, 39 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
index 58f73ea52cc..af34fc3e106 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java
@@ -139,7 +139,7 @@ public class Dispatcher extends AbstractComponent {
return invoker;
}
- // build invoker based on searchpath
+ /** Builds an invoker based on searchpath */
private Optional<SearchInvoker> getSearchPathInvoker(Query query, VespaBackEndSearcher searcher) {
String searchPath = query.getModel().getSearchPath();
if (searchPath == null) return Optional.empty();
@@ -156,7 +156,7 @@ public class Dispatcher extends AbstractComponent {
}
private Optional<SearchInvoker> getInternalInvoker(Query query, VespaBackEndSearcher searcher) {
- Optional<Node> directNode = searchCluster.directDispatchTarget();
+ Optional<Node> directNode = searchCluster.localCorpusDispatchTarget();
if (directNode.isPresent()) {
Node node = directNode.get();
query.trace(false, 2, "Dispatching directly to ", node);
@@ -202,4 +202,5 @@ public class Dispatcher extends AbstractComponent {
metric.add(INTERNAL_METRIC, 1, metricContext);
}
}
+
}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/Group.java b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/Group.java
index bafc72b9b43..93cbd77cef7 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/Group.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/Group.java
@@ -77,6 +77,11 @@ public class Group {
return this.activeDocuments.get();
}
+ public boolean isFullCoverageStatusChanged(boolean hasFullCoverageNow) {
+ boolean previousState = hasFullCoverage.getAndSet(hasFullCoverageNow);
+ return previousState != hasFullCoverageNow;
+ }
+
@Override
public String toString() { return "search group " + id; }
@@ -90,8 +95,4 @@ public class Group {
return ((Group) other).id == this.id;
}
- public boolean isFullCoverageStatusChanged(boolean hasFullCoverageNow) {
- boolean previousState = hasFullCoverage.getAndSet(hasFullCoverageNow);
- return previousState != hasFullCoverageNow;
- }
}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/PingFactory.java b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/PingFactory.java
index c9f722ef79b..285a1fcd57e 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/PingFactory.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/PingFactory.java
@@ -6,5 +6,7 @@ import com.yahoo.search.cluster.ClusterMonitor;
import java.util.concurrent.Callable;
public interface PingFactory {
+
Callable<Pong> createPinger(Node node, ClusterMonitor<Node> monitor);
+
}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java
index c091e211aca..fed4ffb1f08 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java
@@ -55,7 +55,7 @@ public class SearchCluster implements NodeManager<Node> {
* if it only queries this cluster when the local node cannot be used, to avoid unnecessary
* cross-node network traffic.
*/
- private final Optional<Node> directDispatchTarget;
+ private final Optional<Node> localCorpusDispatchTarget;
public SearchCluster(String clusterId, DispatchConfig dispatchConfig, int containerClusterSize, VipStatus vipStatus) {
this.clusterId = clusterId;
@@ -82,8 +82,11 @@ public class SearchCluster implements NodeManager<Node> {
nodesByHostBuilder.put(node.hostname(), node);
this.nodesByHost = nodesByHostBuilder.build();
- this.directDispatchTarget = findDirectDispatchTarget(HostName.getLocalhost(), size, containerClusterSize,
- nodesByHost, groups);
+ this.localCorpusDispatchTarget = findLocalCorpusDispatchTarget(HostName.getLocalhost(),
+ size,
+ containerClusterSize,
+ nodesByHost,
+ groups);
this.clusterMonitor = new ClusterMonitor<>(this);
}
@@ -102,11 +105,11 @@ public class SearchCluster implements NodeManager<Node> {
}
}
- private static Optional<Node> findDirectDispatchTarget(String selfHostname,
- int searchClusterSize,
- int containerClusterSize,
- ImmutableMultimap<String, Node> nodesByHost,
- ImmutableMap<Integer, Group> groups) {
+ private static Optional<Node> findLocalCorpusDispatchTarget(String selfHostname,
+ int searchClusterSize,
+ int containerClusterSize,
+ ImmutableMultimap<String, Node> nodesByHost,
+ ImmutableMap<Integer, Group> groups) {
// A search node in the search cluster in question is configured on the same host as the currently running container.
// It has all the data <==> No other nodes in the search cluster have the same group id as this node.
// That local search node responds.
@@ -186,20 +189,20 @@ public class SearchCluster implements NodeManager<Node> {
}
/**
- * Returns the recipient we should dispatch queries directly to (bypassing fdispatch),
+ * Returns the single, local node we should dispatch queries directly to,
* or empty if we should not dispatch directly.
*/
- public Optional<Node> directDispatchTarget() {
- if ( directDispatchTarget.isEmpty()) return Optional.empty();
+ public Optional<Node> localCorpusDispatchTarget() {
+ if ( localCorpusDispatchTarget.isEmpty()) return Optional.empty();
// Only use direct dispatch if the local group has sufficient coverage
- Group localSearchGroup = groups.get(directDispatchTarget.get().group());
+ Group localSearchGroup = groups.get(localCorpusDispatchTarget.get().group());
if ( ! localSearchGroup.hasSufficientCoverage()) return Optional.empty();
// Only use direct dispatch if the local search node is up
- if ( ! directDispatchTarget.get().isWorking()) return Optional.empty();
+ if ( ! localCorpusDispatchTarget.get().isWorking()) return Optional.empty();
- return directDispatchTarget;
+ return localCorpusDispatchTarget;
}
/** Used by the cluster monitor to manage node status */
@@ -207,7 +210,7 @@ public class SearchCluster implements NodeManager<Node> {
public void working(Node node) {
node.setWorking(true);
- if (usesDirectDispatchTo(node))
+ if (usesLocalCorpusIn(node))
vipStatus.addToRotation(clusterId);
}
@@ -216,33 +219,34 @@ public class SearchCluster implements NodeManager<Node> {
public void failed(Node node) {
node.setWorking(false);
- // Take ourselves out if we usually dispatch only to our own host
- if (usesDirectDispatchTo(node))
+ if (usesLocalCorpusIn(node))
vipStatus.removeFromRotation(clusterId);
}
private void updateSufficientCoverage(Group group, boolean sufficientCoverage) {
- // update VIP status if we direct dispatch to this group and coverage status changed
+ group.setHasSufficientCoverage(sufficientCoverage);
+
boolean isInRotation = vipStatus.isInRotation();
boolean hasChanged = sufficientCoverage != group.hasSufficientCoverage();
- boolean isDirectDispatchGroupAndChange = usesDirectDispatchTo(group) && hasChanged;
- group.setHasSufficientCoverage(sufficientCoverage);
- if ((!isInRotation || isDirectDispatchGroupAndChange) && sufficientCoverage) {
- // We will set this cluster in rotation if
- // - not already in rotation and one group has sufficient coverage.
- vipStatus.addToRotation(clusterId);
- } else if (isDirectDispatchGroupAndChange) {
- // We will take it out of rotation if the group is mandatory (direct dispatch to this group)
- vipStatus.removeFromRotation(clusterId);
+
+ if (usesLocalCorpusIn(group)) { // follow the status of the local corpus
+ if (sufficientCoverage)
+ vipStatus.addToRotation(clusterId);
+ else
+ vipStatus.removeFromRotation(clusterId);
+ }
+ else {
+ if ( ! isInRotation && sufficientCoverage)
+ vipStatus.addToRotation(clusterId);
}
}
- private boolean usesDirectDispatchTo(Node node) {
- return directDispatchTarget.isPresent() && directDispatchTarget.get().equals(node);
+ private boolean usesLocalCorpusIn(Node node) {
+ return localCorpusDispatchTarget.isPresent() && localCorpusDispatchTarget.get().equals(node);
}
- private boolean usesDirectDispatchTo(Group group) {
- return directDispatchTarget.isPresent() && directDispatchTarget.get().group() == group.id();
+ private boolean usesLocalCorpusIn(Group group) {
+ return localCorpusDispatchTarget.isPresent() && localCorpusDispatchTarget.get().group() == group.id();
}
/** Used by the cluster monitor to manage node status */
diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/DispatcherTest.java b/container-search/src/test/java/com/yahoo/search/dispatch/DispatcherTest.java
index 03a417c9bbb..310f536f961 100644
--- a/container-search/src/test/java/com/yahoo/search/dispatch/DispatcherTest.java
+++ b/container-search/src/test/java/com/yahoo/search/dispatch/DispatcherTest.java
@@ -69,7 +69,7 @@ public class DispatcherTest {
public void requireThatDispatcherSupportsSingleNodeDirectDispatch() {
SearchCluster cl = new MockSearchCluster("1", 0, 0) {
@Override
- public Optional<Node> directDispatchTarget() {
+ public Optional<Node> localCorpusDispatchTarget() {
return Optional.of(new Node(1, "test", 123, 1));
}
};
diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/MockSearchCluster.java b/container-search/src/test/java/com/yahoo/search/dispatch/MockSearchCluster.java
index 7ee62ae9978..f4bfa766328 100644
--- a/container-search/src/test/java/com/yahoo/search/dispatch/MockSearchCluster.java
+++ b/container-search/src/test/java/com/yahoo/search/dispatch/MockSearchCluster.java
@@ -89,7 +89,7 @@ public class MockSearchCluster extends SearchCluster {
}
@Override
- public Optional<Node> directDispatchTarget() {
+ public Optional<Node> localCorpusDispatchTarget() {
return Optional.empty();
}