summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-08-19 19:08:36 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2022-08-19 19:32:41 +0200
commit47b7b4eab90ec796bbb346e1b91960d2fa6241d0 (patch)
treeed0bd581df96db17e3ff2df236bfd67120680373 /config-model
parent2194b0c451190e2c27425a21c432370d923e7190 (diff)
Add best-of-random-2 dispatch policy.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/DispatchTuning.java16
-rw-r--r--config-model/src/main/resources/schema/content.rnc2
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/DispatchTuningTest.java29
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/cluster/DomDispatchTuningBuilderTest.java47
4 files changed, 64 insertions, 30 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/DispatchTuning.java b/config-model/src/main/java/com/yahoo/vespa/model/content/DispatchTuning.java
index 6cad778dccf..ab93e42a1ff 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/DispatchTuning.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/DispatchTuning.java
@@ -11,10 +11,16 @@ public class DispatchTuning {
public static final DispatchTuning empty = new DispatchTuning.Builder().build();
- public enum DispatchPolicy { ROUNDROBIN, ADAPTIVE }
+ public enum DispatchPolicy {
+ ROUNDROBIN,
+ LATENCY_AMORTIZED_OVER_REQUESTS,
+ LATENCY_AMORTIZED_OVER_TIME,
+ BEST_OF_RANDOM_2,
+ ADAPTIVE
+ }
private final Integer maxHitsPerPartition;
- private DispatchPolicy dispatchPolicy;
+ private final DispatchPolicy dispatchPolicy;
private final Double minActiveDocsCoverage;
public Double getTopkProbability() {
@@ -36,9 +42,6 @@ public class DispatchTuning {
/** Returns the policy used to select which group to dispatch a query to */
public DispatchPolicy getDispatchPolicy() { return dispatchPolicy; }
- @SuppressWarnings("unused")
- public void setDispatchPolicy(DispatchPolicy dispatchPolicy) { this.dispatchPolicy = dispatchPolicy; }
-
/** Returns the percentage of documents which must be available in a group for that group to receive queries */
public Double getMinActiveDocsCoverage() { return minActiveDocsCoverage; }
@@ -71,6 +74,9 @@ public class DispatchTuning {
switch (policy.toLowerCase()) {
case "adaptive": case "random": return DispatchPolicy.ADAPTIVE; // TODO: Deprecate 'random' on Vespa 9
case "round-robin": return DispatchPolicy.ROUNDROBIN;
+ case "latency-amortized-over-requests" : return DispatchPolicy.LATENCY_AMORTIZED_OVER_REQUESTS;
+ case "latency-amortized-over-time" : return DispatchPolicy.LATENCY_AMORTIZED_OVER_TIME;
+ case "best-of-random-2" : return DispatchPolicy.BEST_OF_RANDOM_2;
default: throw new IllegalArgumentException("Unknown dispatch policy '" + policy + "'");
}
}
diff --git a/config-model/src/main/resources/schema/content.rnc b/config-model/src/main/resources/schema/content.rnc
index ff45b127b8b..0392695443b 100644
--- a/config-model/src/main/resources/schema/content.rnc
+++ b/config-model/src/main/resources/schema/content.rnc
@@ -82,7 +82,7 @@ ClusterControllerTuning = element cluster-controller {
DispatchTuning = element dispatch {
element max-hits-per-partition { xsd:nonNegativeInteger }? &
- element dispatch-policy { string "round-robin" | string "adaptive" | string "random" }? &
+ element dispatch-policy { string "round-robin" | string "adaptive" | string "random" | "best-of-random-2" | "latency-amortized-over-requests" | "latency-amortized-over-time" }? &
element min-active-docs-coverage { xsd:double }? &
element top-k-probability { xsd:double }?
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/DispatchTuningTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/DispatchTuningTest.java
index cddbe267628..af547965749 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/DispatchTuningTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/DispatchTuningTest.java
@@ -20,7 +20,7 @@ public class DispatchTuningTest {
.setTopKProbability(18.3)
.build();
assertEquals(69, dispatch.getMaxHitsPerPartition().intValue());
- assertEquals(12.5, dispatch.getMinActiveDocsCoverage().doubleValue(), 0.0);
+ assertEquals(12.5, dispatch.getMinActiveDocsCoverage(), 0.0);
assertEquals(DispatchTuning.DispatchPolicy.ROUNDROBIN, dispatch.getDispatchPolicy());
assertEquals(18.3, dispatch.getTopkProbability(), 0.0);
}
@@ -44,6 +44,33 @@ public class DispatchTuningTest {
}
@Test
+ void requireThatLatencyAmortizedOverRequestsDispatchWork() {
+ DispatchTuning dispatch = new DispatchTuning.Builder()
+ .setDispatchPolicy("latency-amortized-over-requests")
+ .build();
+ assertEquals(DispatchTuning.DispatchPolicy.LATENCY_AMORTIZED_OVER_REQUESTS, dispatch.getDispatchPolicy());
+ assertNull(dispatch.getMinActiveDocsCoverage());
+ }
+
+ @Test
+ void requireThatLatencyAmortizedOverTimeDispatchWork() {
+ DispatchTuning dispatch = new DispatchTuning.Builder()
+ .setDispatchPolicy("latency-amortized-over-time")
+ .build();
+ assertEquals(DispatchTuning.DispatchPolicy.LATENCY_AMORTIZED_OVER_TIME, dispatch.getDispatchPolicy());
+ assertNull(dispatch.getMinActiveDocsCoverage());
+ }
+
+ @Test
+ void requireThatBestOfRandom2DispatchWork() {
+ DispatchTuning dispatch = new DispatchTuning.Builder()
+ .setDispatchPolicy("best-of-random-2")
+ .build();
+ assertEquals(DispatchTuning.DispatchPolicy.BEST_OF_RANDOM_2, dispatch.getDispatchPolicy());
+ assertNull(dispatch.getMinActiveDocsCoverage());
+ }
+
+ @Test
void requireThatDefaultsAreNull() {
DispatchTuning dispatch = new DispatchTuning.Builder().build();
assertNull(dispatch.getMaxHitsPerPartition());
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/cluster/DomDispatchTuningBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/cluster/DomDispatchTuningBuilderTest.java
index 564d6024acf..9eaa4ea6ed3 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/cluster/DomDispatchTuningBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/cluster/DomDispatchTuningBuilderTest.java
@@ -61,36 +61,37 @@ public class DomDispatchTuningBuilderTest {
" </tuning>" +
"</content>");
assertEquals(69, dispatch.getMaxHitsPerPartition().intValue());
- assertEquals(12.5, dispatch.getMinActiveDocsCoverage().doubleValue(), 0.0);
- assertEquals(0.999, dispatch.getTopkProbability().doubleValue(), 0.0);
+ assertEquals(12.5, dispatch.getMinActiveDocsCoverage(), 0.0);
+ assertEquals(0.999, dispatch.getTopkProbability(), 0.0);
}
- @Test
- void requireThatTuningDispatchPolicyRoundRobin() throws Exception {
- DispatchTuning dispatch = newTuningDispatch(
- "<content>" +
- " <tuning>" +
- " <dispatch>" +
- " <dispatch-policy>round-robin</dispatch-policy>" +
- " </dispatch>" +
- " </tuning>" +
- "</content>");
- assertEquals(DispatchTuning.DispatchPolicy.ROUNDROBIN, dispatch.getDispatchPolicy());
+ private static String dispatchPolicy(String policy) {
+ return "<content>" +
+ " <tuning>" +
+ " <dispatch>" +
+ " <dispatch-policy>" + policy +"</dispatch-policy>" +
+ " </dispatch>" +
+ " </tuning>" +
+ "</content>";
}
@Test
- void requireThatTuningDispatchPolicyRandom() throws Exception {
- DispatchTuning dispatch = newTuningDispatch(
- "<content>" +
- " <tuning>" +
- " <dispatch>" +
- " <dispatch-policy>random</dispatch-policy>" +
- " </dispatch>" +
- " </tuning>" +
- "</content>");
- assertEquals(DispatchTuning.DispatchPolicy.ADAPTIVE, dispatch.getDispatchPolicy());
+ void requireThatTuningDispatchPolicies() throws Exception {
+ assertEquals(DispatchTuning.DispatchPolicy.ROUNDROBIN,
+ newTuningDispatch(dispatchPolicy("round-robin")).getDispatchPolicy());
+ assertEquals(DispatchTuning.DispatchPolicy.ADAPTIVE,
+ newTuningDispatch(dispatchPolicy("random")).getDispatchPolicy());
+ assertEquals(DispatchTuning.DispatchPolicy.ADAPTIVE,
+ newTuningDispatch(dispatchPolicy("adaptive")).getDispatchPolicy());
+ assertEquals(DispatchTuning.DispatchPolicy.BEST_OF_RANDOM_2,
+ newTuningDispatch(dispatchPolicy("best-of-random-2")).getDispatchPolicy());
+ assertEquals(DispatchTuning.DispatchPolicy.LATENCY_AMORTIZED_OVER_REQUESTS,
+ newTuningDispatch(dispatchPolicy("latency-amortized-over-requests")).getDispatchPolicy());
+ assertEquals(DispatchTuning.DispatchPolicy.LATENCY_AMORTIZED_OVER_TIME,
+ newTuningDispatch(dispatchPolicy("latency-amortized-over-time")).getDispatchPolicy());
}
+
private static DispatchTuning newTuningDispatch(String xml) throws Exception {
return DomTuningDispatchBuilder.build(
new ModelElement(DocumentBuilderFactory.newInstance()