summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-09-23 12:14:29 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2019-09-23 12:14:29 +0200
commit9c7efa2f0bbaf958d5b5bf439c0fcc8ed078c612 (patch)
tree4c9f0cb3f3d26c07f41481780c9e14a1059de2d7
parent8d240397326f86f4f244c822b44e97bac9c5bff2 (diff)
Complete test coverage for DispatchConfig
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/DispatchGroup.java16
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java12
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/cluster/ClusterTest.java65
-rw-r--r--configdefinitions/src/vespa/dispatch.def7
4 files changed, 74 insertions, 26 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/DispatchGroup.java b/config-model/src/main/java/com/yahoo/vespa/model/search/DispatchGroup.java
index 04b293fdc36..6769da0e024 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/DispatchGroup.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/DispatchGroup.java
@@ -54,28 +54,12 @@ public class DispatchGroup {
return sc.useFixedRowInDispatch();
}
- public int getMinNodesPerColumn() {
- return sc.getMinNodesPerColumn();
- }
-
public int getSearchableCopies() { return sc.getSearchableCopies(); }
public int getMaxNodesDownPerFixedRow() {
return sc.getMaxNodesDownPerFixedRow();
}
- SearchCoverage getSearchCoverage() {
- return sc.getSearchCoverage();
- }
-
- Tuning getTuning() {
- return sc.getTuning();
- }
-
- String getClusterName() {
- return sc.getClusterName();
- }
-
static class Iterator implements java.util.Iterator<SearchInterface> {
private java.util.Iterator<Map<Integer, SearchInterface>> it1;
private java.util.Iterator<SearchInterface> it2;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
index 0b8b2ddde75..40cc09938e2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
@@ -274,10 +274,6 @@ public class IndexedSearchCluster extends SearchCluster
this.searchCoverage = searchCoverage;
}
- SearchCoverage getSearchCoverage() {
- return searchCoverage;
- }
-
@Override
public DerivedConfiguration getSdConfig() { return null; }
@@ -304,8 +300,6 @@ public class IndexedSearchCluster extends SearchCluster
@Override
protected void exportSdFiles(File toDir) { }
- int getMinNodesPerColumn() { return 0; }
-
boolean useFixedRowInDispatch() {
for (SearchNode node : getSearchNodes()) {
if (node.getNodeSpec().groupIndex() > 0) {
@@ -355,6 +349,9 @@ public class IndexedSearchCluster extends SearchCluster
nodeBuilder.fs4port(node.getDispatchPort());
builder.node(nodeBuilder);
}
+ if (useAdaptiveDispatch)
+ builder.distributionPolicy(DistributionPolicy.ADAPTIVE);
+
if (tuning.dispatch.minActiveDocsCoverage != null)
builder.minActivedocsPercentage(tuning.dispatch.minActiveDocsCoverage);
if (tuning.dispatch.minGroupCoverage != null)
@@ -369,6 +366,9 @@ public class IndexedSearchCluster extends SearchCluster
break;
}
}
+ if (tuning.dispatch.maxHitsPerPartition != null)
+ builder.maxHitsPerNode(tuning.dispatch.maxHitsPerPartition);
+
builder.maxNodesDownPerGroup(rootDispatch.getMaxNodesDownPerFixedRow());
builder.useLocalNode(tuning.dispatch.useLocalNode);
builder.searchableCopies(rootDispatch.getSearchableCopies());
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/cluster/ClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/cluster/ClusterTest.java
index c7c76257778..4291c68eff8 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/cluster/ClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/cluster/ClusterTest.java
@@ -15,7 +15,9 @@ import java.util.List;
import static com.yahoo.config.model.test.TestUtil.joinLines;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
/**
* @author Simon Thoresen Hult
@@ -66,6 +68,28 @@ public class ClusterTest {
}
@Test
+ public void requireThatDispatchTuningIsApplied() {
+ ContentCluster cluster = newContentCluster(joinLines("<search>", "</search>"),
+ "",
+ joinLines(
+ "<max-hits-per-partition>77</max-hits-per-partition>",
+ "<dispatch-policy>adaptive</dispatch-policy>",
+ "<min-group-coverage>13</min-group-coverage>",
+ "<min-active-docs-coverage>93</min-active-docs-coverage>",
+ "<use-local-node>true</use-local-node>"),
+ false);
+ DispatchConfig.Builder builder = new DispatchConfig.Builder();
+ cluster.getSearch().getConfig(builder);
+ DispatchConfig config = new DispatchConfig(builder);
+ assertEquals(2, config.searchableCopies());
+ assertEquals(93.0, config.minActivedocsPercentage(), DELTA);
+ assertEquals(13.0, config.minGroupCoverage(), DELTA);
+ assertTrue(config.useLocalNode());
+ assertEquals(DispatchConfig.DistributionPolicy.ADAPTIVE, config.distributionPolicy());
+ assertEquals(77, config.maxHitsPerNode());
+ }
+
+ @Test
public void requireThatDefaultDispatchConfigIsCorrect() {
ContentCluster cluster = newContentCluster(joinLines("<search>", "</search>"),
joinLines("<tuning>", "</tuning>"));
@@ -77,21 +101,49 @@ public class ClusterTest {
assertEquals(0, config.maxNodesDownPerGroup());
assertEquals(1.0, config.maxWaitAfterCoverageFactor(), DELTA);
assertEquals(0, config.minWaitAfterCoverageFactor(), DELTA);
+ assertEquals(8, config.numJrtConnectionsPerNode());
+ assertEquals(8, config.numJrtTransportThreads());
+ assertEquals(100.0, config.minSearchCoverage(), DELTA);
+ assertEquals(97.0, config.minActivedocsPercentage(), DELTA);
+ assertEquals(100.0, config.minGroupCoverage(), DELTA);
+ assertFalse(config.useLocalNode());
+ assertEquals(3, config.node().size());
+ assertEquals(0, config.node(0).key());
+ assertEquals(1, config.node(1).key());
+ assertEquals(2, config.node(2).key());
+
+ assertEquals(19106, config.node(0).port());
+ assertEquals(19118, config.node(1).port());
+ assertEquals(19130, config.node(2).port());
+
+ assertEquals(19107, config.node(0).fs4port());
+ assertEquals(19119, config.node(1).fs4port());
+ assertEquals(19131, config.node(2).fs4port());
+
+ assertEquals(0, config.node(0).group());
+ assertEquals(0, config.node(1).group());
+ assertEquals(0, config.node(2).group());
+
+ assertEquals("localhost", config.node(0).host());
+ assertEquals("localhost", config.node(1).host());
+ assertEquals("localhost", config.node(2).host());
}
private static ContentCluster newContentCluster(String contentSearchXml, String searchNodeTuningXml) {
- return newContentCluster(contentSearchXml, searchNodeTuningXml, false);
+ return newContentCluster(contentSearchXml, searchNodeTuningXml, "", false);
}
private static ContentCluster newContentCluster(String contentSearchXml) {
- return newContentCluster(contentSearchXml, "", false);
+ return newContentCluster(contentSearchXml, false);
}
private static ContentCluster newContentCluster(String contentSearchXml, boolean globalDocType) {
- return newContentCluster(contentSearchXml, "", globalDocType);
+ return newContentCluster(contentSearchXml, "", "", globalDocType);
}
- private static ContentCluster newContentCluster(String contentSearchXml, String searchNodeTuningXml, boolean globalDocType) {
+ private static ContentCluster newContentCluster(String contentSearchXml, String searchNodeTuningXml,
+ String dispatchTuning, boolean globalDocType)
+ {
ApplicationPackage app = new MockApplicationPackage.Builder()
.withHosts(joinLines(
"<hosts>",
@@ -123,6 +175,11 @@ public class ClusterTest {
" <node hostalias='my_host' distribution-key='2' />",
" </group>",
contentSearchXml,
+ " <tuning>",
+ " <dispatch>",
+ dispatchTuning,
+ " </dispatch>",
+ " </tuning>",
" </content>",
"</services>"))
.withSearchDefinitions(ApplicationPackageUtils.generateSearchDefinition("my_document"))
diff --git a/configdefinitions/src/vespa/dispatch.def b/configdefinitions/src/vespa/dispatch.def
index 84d5c032395..5229e7da0b8 100644
--- a/configdefinitions/src/vespa/dispatch.def
+++ b/configdefinitions/src/vespa/dispatch.def
@@ -16,6 +16,13 @@ maxNodesDownPerGroup int default=0
# Distribution policy for group selection
distributionPolicy enum { ROUNDROBIN, ADAPTIVE } default=ROUNDROBIN
+## Maximum number of hits that will be requested from a single node
+## in this dataset. If not set, there is no limit. Using this option
+## may help reduce network traffic when searching in datasets with big
+## fan-out, but it will also result in incorrect and incomplete results;
+## don't use it if you don't (really) mean it.
+maxHitsPerNode int default=2147483647
+
# Is multi-level dispatch configured for this cluster
# Deprecated, will go away soon, NOOP
useMultilevelDispatch bool default=false