summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorOlli Virtanen <olli.virtanen@oath.com>2018-11-16 12:54:32 +0100
committerOlli Virtanen <olli.virtanen@oath.com>2018-11-16 12:54:32 +0100
commit6d4dc6565a26e96334de4f2a3d653c75486c22f2 (patch)
treee3cde9aa354d69f7d322c37a73e7fbe00a8b0f11 /container-search
parentb9516d7332baee5744488c1db8e3a8f74c634059 (diff)
Group affinity through searchPath; remove Query from LB assignment
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/LoadBalancer.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/dispatch/LoadBalancerTest.java17
3 files changed, 13 insertions, 12 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 708d80d4969..e95255b31e6 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
@@ -123,6 +123,7 @@ public class Dispatcher extends AbstractComponent {
if (nodes.isEmpty()) {
return Optional.empty();
} else {
+ query.trace(false, 2, "Dispatching internally with search path ", searchPath);
return invokerFactory.supply(query, -1, nodes, true);
}
} catch (InvalidSearchPathException e) {
@@ -141,7 +142,7 @@ public class Dispatcher extends AbstractComponent {
int max = Integer.min(searchCluster.orderedGroups().size(), MAX_GROUP_SELECTION_ATTEMPTS);
Set<Integer> rejected = null;
for (int i = 0; i < max; i++) {
- Optional<Group> groupInCluster = loadBalancer.takeGroupForQuery(query, rejected);
+ Optional<Group> groupInCluster = loadBalancer.takeGroupForQuery(rejected);
if (!groupInCluster.isPresent()) {
// No groups available
break;
@@ -150,7 +151,8 @@ public class Dispatcher extends AbstractComponent {
boolean acceptIncompleteCoverage = (i == max - 1);
Optional<SearchInvoker> invoker = invokerFactory.supply(query, group.id(), group.nodes(), acceptIncompleteCoverage);
if (invoker.isPresent()) {
- query.trace(false, 2, "Dispatching internally to ", group);
+ query.trace(false, 2, "Dispatching internally to search group ", group.id());
+ query.getModel().setSearchPath("/" + group.id());
invoker.get().teardown(() -> loadBalancer.releaseGroup(group));
return invoker;
} else {
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 22573fac2d9..0bc7a9e47d7 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
@@ -52,7 +52,7 @@ public class LoadBalancer {
* @param rejectedGroups if not null, the load balancer will only return groups with IDs not in the set
* @return The node group to target, or <i>empty</i> if the internal dispatch logic cannot be used
*/
- public Optional<Group> takeGroupForQuery(Query query, Set<Integer> rejectedGroups) {
+ public Optional<Group> takeGroupForQuery(Set<Integer> rejectedGroups) {
if (scoreboard == null) {
return Optional.empty();
}
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 698cee743e4..13b75cf9c5a 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
@@ -1,7 +1,6 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.dispatch;
-import com.yahoo.search.Query;
import com.yahoo.search.dispatch.searchcluster.Group;
import com.yahoo.search.dispatch.searchcluster.Node;
import com.yahoo.search.dispatch.searchcluster.SearchCluster;
@@ -26,7 +25,7 @@ public class LoadBalancerTest {
SearchCluster cluster = new SearchCluster(88.0, 99.0, 0, Arrays.asList(n1), null, 1, null);
LoadBalancer lb = new LoadBalancer(cluster, true);
- Optional<Group> grp = lb.takeGroupForQuery(new Query(), null);
+ Optional<Group> grp = lb.takeGroupForQuery(null);
Group group = grp.orElseGet(() -> {
throw new AssertionFailedError("Expected a SearchCluster.Group");
});
@@ -40,7 +39,7 @@ public class LoadBalancerTest {
SearchCluster cluster = new SearchCluster(88.0, 99.0, 0, Arrays.asList(n1, n2), null, 1, null);
LoadBalancer lb = new LoadBalancer(cluster, true);
- Optional<Group> grp = lb.takeGroupForQuery(new Query(), null);
+ Optional<Group> grp = lb.takeGroupForQuery(null);
Group group = grp.orElseGet(() -> {
throw new AssertionFailedError("Expected a SearchCluster.Group");
});
@@ -56,7 +55,7 @@ public class LoadBalancerTest {
SearchCluster cluster = new SearchCluster(88.0, 99.0, 0, Arrays.asList(n1, n2, n3, n4), null, 2, null);
LoadBalancer lb = new LoadBalancer(cluster, true);
- Optional<Group> grp = lb.takeGroupForQuery(new Query(), null);
+ Optional<Group> grp = lb.takeGroupForQuery(null);
assertThat(grp.isPresent(), is(true));
}
@@ -68,14 +67,14 @@ public class LoadBalancerTest {
LoadBalancer lb = new LoadBalancer(cluster, true);
// get first group
- Optional<Group> grp = lb.takeGroupForQuery(new Query(), null);
+ Optional<Group> grp = lb.takeGroupForQuery(null);
Group group = grp.get();
int id1 = group.id();
// release allocation
lb.releaseGroup(group);
// get second group
- grp = lb.takeGroupForQuery(new Query(), null);
+ grp = lb.takeGroupForQuery(null);
group = grp.get();
assertThat(group.id(), not(equalTo(id1)));
}
@@ -88,12 +87,12 @@ public class LoadBalancerTest {
LoadBalancer lb = new LoadBalancer(cluster, true);
// get first group
- Optional<Group> grp = lb.takeGroupForQuery(new Query(), null);
+ Optional<Group> grp = lb.takeGroupForQuery(null);
Group group = grp.get();
int id1 = group.id();
// get second group
- grp = lb.takeGroupForQuery(new Query(), null);
+ grp = lb.takeGroupForQuery(null);
group = grp.get();
int id2 = group.id();
assertThat(id2, not(equalTo(id1)));
@@ -101,7 +100,7 @@ public class LoadBalancerTest {
lb.releaseGroup(group);
// get third group
- grp = lb.takeGroupForQuery(new Query(), null);
+ grp = lb.takeGroupForQuery(null);
group = grp.get();
assertThat(group.id(), equalTo(id2));
}