summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-11-23 12:04:55 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2022-11-23 12:04:55 +0100
commitf82fe83ea8cdab7e190e917b9391b5f0c36a3351 (patch)
tree1d149f456c4c29666aa50ef65c15c9fcf44dc503 /container-search
parent02dbfdece2c0bc6a1e2352c737da9c2ba7ae3d82 (diff)
No need to require the full SearchCluster when you only need a list of Groups.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java9
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java7
-rw-r--r--container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java15
3 files changed, 11 insertions, 20 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 55073f25f0e..3a198c3576a 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
@@ -52,10 +52,9 @@ public class Dispatcher extends AbstractComponent {
/** If set will control computation of how many hits will be fetched from each partition.*/
public static final CompoundName topKProbability = CompoundName.fromComponents(DISPATCH, TOP_K_PROBABILITY);
- /** A model of the search cluster this dispatches to */
- private final SearchCluster searchCluster;
private final ClusterMonitor<Node> clusterMonitor;
private final LoadBalancer loadBalancer;
+ private final SearchCluster searchCluster;
private final InvokerFactory invokerFactory;
private final int maxHitsPerNode;
private final RpcResourcePool rpcResourcePool;
@@ -114,7 +113,7 @@ public class Dispatcher extends AbstractComponent {
this.searchCluster = searchCluster;
this.clusterMonitor = clusterMonitor;
- this.loadBalancer = new LoadBalancer(searchCluster, toLoadBalancerPolicy(dispatchConfig.distributionPolicy()));
+ this.loadBalancer = new LoadBalancer(searchCluster.orderedGroups(), toLoadBalancerPolicy(dispatchConfig.distributionPolicy()));
this.invokerFactory = invokerFactory;
this.rpcResourcePool = rpcResourcePool;
this.maxHitsPerNode = dispatchConfig.maxHitsPerNode();
@@ -172,7 +171,7 @@ public class Dispatcher extends AbstractComponent {
public SearchInvoker getSearchInvoker(Query query, VespaBackEndSearcher searcher) {
SearchCluster cluster = searchCluster; // Take a snapshot
- SearchInvoker invoker = getSearchPathInvoker(query, searcher, cluster).orElseGet(() -> getInternalInvoker(query, searcher, cluster));
+ SearchInvoker invoker = getSearchPathInvoker(query, searcher, cluster).orElseGet(() -> getInternalInvoker(query, searcher, cluster, loadBalancer));
if (query.properties().getBoolean(com.yahoo.search.query.Model.ESTIMATE)) {
query.setHits(0);
@@ -201,7 +200,7 @@ public class Dispatcher extends AbstractComponent {
}
}
- private SearchInvoker getInternalInvoker(Query query, VespaBackEndSearcher searcher, SearchCluster cluster) {
+ private SearchInvoker getInternalInvoker(Query query, VespaBackEndSearcher searcher, SearchCluster cluster, LoadBalancer loadBalancer) {
Optional<Node> directNode = cluster.localCorpusDispatchTarget();
if (directNode.isPresent()) {
Node node = directNode.get();
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java b/container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java
index 59821827d4e..52cc6ad7711 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java
@@ -2,7 +2,6 @@
package com.yahoo.search.dispatch;
import com.yahoo.search.dispatch.searchcluster.Group;
-import com.yahoo.search.dispatch.searchcluster.SearchCluster;
import java.time.Duration;
import java.util.ArrayList;
@@ -34,9 +33,9 @@ public class LoadBalancer {
public enum Policy { ROUNDROBIN, LATENCY_AMORTIZED_OVER_REQUESTS, LATENCY_AMORTIZED_OVER_TIME, BEST_OF_RANDOM_2}
- public LoadBalancer(SearchCluster searchCluster, Policy policy) {
- this.scoreboard = new ArrayList<>(searchCluster.groups().size());
- for (Group group : searchCluster.orderedGroups()) {
+ public LoadBalancer(List<Group> groups, Policy policy) {
+ this.scoreboard = new ArrayList<>(groups.size());
+ for (Group group : groups) {
scoreboard.add(new GroupStatus(group));
}
if (scoreboard.size() == 1)
diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java b/container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java
index 427062a1c4c..40711fb8dbe 100644
--- a/container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java
+++ b/container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java
@@ -6,7 +6,6 @@ import com.yahoo.search.dispatch.LoadBalancer.BestOfRandom2;
import com.yahoo.search.dispatch.LoadBalancer.GroupStatus;
import com.yahoo.search.dispatch.searchcluster.Group;
import com.yahoo.search.dispatch.searchcluster.Node;
-import com.yahoo.search.dispatch.searchcluster.SearchCluster;
import org.junit.jupiter.api.Test;
import org.opentest4j.AssertionFailedError;
@@ -18,8 +17,6 @@ import java.util.List;
import java.util.Optional;
import java.util.Random;
-import static com.yahoo.search.dispatch.MockSearchCluster.createDispatchConfig;
-import static com.yahoo.search.dispatch.MockSearchCluster.createNodesConfig;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -32,8 +29,7 @@ public class LoadBalancerTest {
@Test
void requireThatLoadBalancerServesSingleNodeSetups() {
Node n1 = new Node(0, "test-node1", 0);
- SearchCluster cluster = new SearchCluster("a", createDispatchConfig(), createNodesConfig(n1), null, null);
- LoadBalancer lb = new LoadBalancer(cluster, LoadBalancer.Policy.ROUNDROBIN);
+ LoadBalancer lb = new LoadBalancer(List.of(new Group(0, List.of(n1))), LoadBalancer.Policy.ROUNDROBIN);
Optional<Group> grp = lb.takeGroup(null);
Group group = grp.orElseThrow(() -> {
@@ -46,8 +42,7 @@ public class LoadBalancerTest {
void requireThatLoadBalancerServesMultiGroupSetups() {
Node n1 = new Node(0, "test-node1", 0);
Node n2 = new Node(1, "test-node2", 1);
- SearchCluster cluster = new SearchCluster("a", createDispatchConfig(), createNodesConfig(n1, n2), null, null);
- LoadBalancer lb = new LoadBalancer(cluster, LoadBalancer.Policy.ROUNDROBIN);
+ LoadBalancer lb = new LoadBalancer(List.of(new Group(0, List.of(n1)), new Group(1,List.of(n2))), LoadBalancer.Policy.ROUNDROBIN);
Optional<Group> grp = lb.takeGroup(null);
Group group = grp.orElseThrow(() -> {
@@ -62,8 +57,7 @@ public class LoadBalancerTest {
Node n2 = new Node(1, "test-node2", 0);
Node n3 = new Node(0, "test-node3", 1);
Node n4 = new Node(1, "test-node4", 1);
- SearchCluster cluster = new SearchCluster("a", createDispatchConfig(), createNodesConfig(n1, n2, n3, n4), null, null);
- LoadBalancer lb = new LoadBalancer(cluster, LoadBalancer.Policy.ROUNDROBIN);
+ LoadBalancer lb = new LoadBalancer(List.of(new Group(0, List.of(n1,n2)), new Group(1,List.of(n3,n4))), LoadBalancer.Policy.ROUNDROBIN);
Optional<Group> grp = lb.takeGroup(null);
assertTrue(grp.isPresent());
@@ -73,8 +67,7 @@ public class LoadBalancerTest {
void requireThatLoadBalancerReturnsDifferentGroups() {
Node n1 = new Node(0, "test-node1", 0);
Node n2 = new Node(1, "test-node2", 1);
- SearchCluster cluster = new SearchCluster("a", createDispatchConfig(), createNodesConfig(n1, n2), null, null);
- LoadBalancer lb = new LoadBalancer(cluster, LoadBalancer.Policy.ROUNDROBIN);
+ LoadBalancer lb = new LoadBalancer(List.of(new Group(0, List.of(n1)), new Group(1,List.of(n2))), LoadBalancer.Policy.ROUNDROBIN);
// get first group
Optional<Group> grp = lb.takeGroup(null);