summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-08-18 13:16:59 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-08-18 13:16:59 +0200
commit4f1437c35a6adbb5df26c3372bba5f32c3cdf882 (patch)
tree13e1d495343cf52e55b1ec7d19d3af6ddf803d09 /container-search
parent008827e05bef46027d54d33e01e597e45d9435e8 (diff)
Handle single group
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/SearchCluster.java27
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/fastsearch/test/DirectSearchTestCase.java34
2 files changed, 38 insertions, 23 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/SearchCluster.java b/container-search/src/main/java/com/yahoo/search/dispatch/SearchCluster.java
index ff0d420027f..05c27c6ca86 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/SearchCluster.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/SearchCluster.java
@@ -131,19 +131,22 @@ public class SearchCluster implements NodeManager<SearchCluster.Node> {
// Update active documents per group and use it to decide if the group should be active
for (Group group : groups.values())
group.aggregateActiveDocuments();
- for (Group currentGroup : groups.values()) {
- long sumOfAactiveDocumentsInOtherGroups = 0;
- for (Group otherGroup : groups.values())
- if ( otherGroup != currentGroup)
- sumOfAactiveDocumentsInOtherGroups += otherGroup.getActiveDocuments();
- long averageDocumentsInOtherGroups = sumOfAactiveDocumentsInOtherGroups / (groups.size() - 1);
- if (averageDocumentsInOtherGroups == 0)
- currentGroup.setHasSufficientCoverage(true); // no information about any group; assume coverage
- else
- currentGroup.setHasSufficientCoverage(
- 100 * (double)currentGroup.getActiveDocuments() / averageDocumentsInOtherGroups > minActivedocsCoveragePercentage);
+ if (groups.size() == 1) {
+ groups.values().iterator().next().setHasSufficientCoverage(true); // by definition
+ } else {
+ for (Group currentGroup : groups.values()) {
+ long sumOfAactiveDocumentsInOtherGroups = 0;
+ for (Group otherGroup : groups.values())
+ if (otherGroup != currentGroup)
+ sumOfAactiveDocumentsInOtherGroups += otherGroup.getActiveDocuments();
+ long averageDocumentsInOtherGroups = sumOfAactiveDocumentsInOtherGroups / (groups.size() - 1);
+ if (averageDocumentsInOtherGroups == 0)
+ currentGroup.setHasSufficientCoverage(true); // no information about any group; assume coverage
+ else
+ currentGroup.setHasSufficientCoverage(
+ 100 * (double) currentGroup.getActiveDocuments() / averageDocumentsInOtherGroups > minActivedocsCoveragePercentage);
+ }
}
-
}
private Pong getPong(FutureTask<Pong> futurePong, Node node) {
diff --git a/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/DirectSearchTestCase.java b/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/DirectSearchTestCase.java
index 7cf765eda9e..740639650e2 100644
--- a/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/DirectSearchTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/fastsearch/test/DirectSearchTestCase.java
@@ -65,41 +65,53 @@ public class DirectSearchTestCase {
tester.search("?query=test&dispatch.direct=true&nocache");
assertEquals("2 ping requests, 1 search request", 3, tester.requestCount(FastSearcherTester.selfHostname, 9999));
}
-
+
@Test
public void testNoDirectDispatchWhenInsufficientCoverage() {
- FastSearcherTester tester = new FastSearcherTester(3,
- FastSearcherTester.selfHostname + ":9999:0",
+ FastSearcherTester tester = new FastSearcherTester(3,
+ FastSearcherTester.selfHostname + ":9999:0",
"host1:9999:1",
"host2:9999:2");
double k = 38.78955; // multiply all document counts by some number > 1 to test that we compute % correctly
-
- tester.setActiveDocuments(FastSearcherTester.selfHostname, (long)(96 * k));
- tester.setActiveDocuments("host1", (long)(100 * k));
- tester.setActiveDocuments("host2", (long)(100 * k));
+
+ tester.setActiveDocuments(FastSearcherTester.selfHostname, (long) (96 * k));
+ tester.setActiveDocuments("host1", (long) (100 * k));
+ tester.setActiveDocuments("host2", (long) (100 * k));
assertEquals("1 ping request, 0 search requests", 1, tester.requestCount(FastSearcherTester.selfHostname, 9999));
tester.search("?query=test&dispatch.direct=true&nocache");
- assertEquals("Still 1 ping request, 0 search requests because the default coverage is 97%, and we only have 96% locally",
+ assertEquals("Still 1 ping request, 0 search requests because the default coverage is 97%, and we only have 96% locally",
1, tester.requestCount(FastSearcherTester.selfHostname, 9999));
- tester.setActiveDocuments(FastSearcherTester.selfHostname, (long)(99 * k));
+ tester.setActiveDocuments(FastSearcherTester.selfHostname, (long) (99 * k));
assertEquals("2 ping request, 0 search requests", 2, tester.requestCount(FastSearcherTester.selfHostname, 9999));
tester.search("?query=test&dispatch.direct=true&nocache");
assertEquals("2 ping request, 1 search requests because we now have 99% locally",
3, tester.requestCount(FastSearcherTester.selfHostname, 9999));
- tester.setActiveDocuments("host1", (long)(104 * k));
+ tester.setActiveDocuments("host1", (long) (104 * k));
assertEquals("2 ping request, 1 search requests", 3, tester.requestCount(FastSearcherTester.selfHostname, 9999));
tester.search("?query=test&dispatch.direct=true&nocache");
assertEquals("2 ping request, 2 search requests because 99/((104+100)/2) > 0.97",
4, tester.requestCount(FastSearcherTester.selfHostname, 9999));
- tester.setActiveDocuments("host2", (long)(102 * k));
+ tester.setActiveDocuments("host2", (long) (102 * k));
assertEquals("2 ping request, 2 search requests", 4, tester.requestCount(FastSearcherTester.selfHostname, 9999));
tester.search("?query=test&dispatch.direct=true&nocache");
assertEquals("Still 2 ping request, 2 search requests because 99/((104+102)/2) < 0.97",
4, tester.requestCount(FastSearcherTester.selfHostname, 9999));
}
+ @Test
+ public void testCoverageWithSingleGroup() {
+ FastSearcherTester tester = new FastSearcherTester(1, FastSearcherTester.selfHostname + ":9999:0");
+
+ tester.setActiveDocuments(FastSearcherTester.selfHostname, 100);
+ assertEquals("1 ping request, 0 search requests", 1, tester.requestCount(FastSearcherTester.selfHostname, 9999));
+ tester.search("?query=test&dispatch.direct=true&nocache");
+ assertEquals("1 ping request, 0 search requests",
+ 2, tester.requestCount(FastSearcherTester.selfHostname, 9999));
+
+ }
+
}