diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-08-19 19:08:36 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-08-19 19:32:41 +0200 |
commit | 47b7b4eab90ec796bbb346e1b91960d2fa6241d0 (patch) | |
tree | ed0bd581df96db17e3ff2df236bfd67120680373 /config-model | |
parent | 2194b0c451190e2c27425a21c432370d923e7190 (diff) |
Add best-of-random-2 dispatch policy.
Diffstat (limited to 'config-model')
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() |