blob: 3b694f8986c4c9e77942d2637ee8360300d1e580 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.content;
/**
* Tuning of dispatching to content nodes, see the
* <a href="https://docs.vespa.ai/en/reference/services-content.html#dispatch-tuning">dispatch tuning documentation</a>.
*
* @author Simon Thoresen Hult
*/
public class DispatchTuning {
public static final DispatchTuning empty = new DispatchTuning.Builder().build();
public enum DispatchPolicy { ROUNDROBIN, ADAPTIVE}
private final Integer maxHitsPerPartition;
private DispatchPolicy dispatchPolicy;
private final Double minGroupCoverage;
private final Double minActiveDocsCoverage;
public Double getTopkProbability() {
return topkProbability;
}
private final Double topkProbability;
private DispatchTuning(Builder builder) {
maxHitsPerPartition = builder.maxHitsPerPartition;
dispatchPolicy = builder.dispatchPolicy;
minGroupCoverage = builder.minGroupCoverage;
minActiveDocsCoverage = builder.minActiveDocsCoverage;
topkProbability = builder.topKProbability;
}
/** Returns the max number of hits to fetch from each partition, or null to fetch all */
public Integer getMaxHitsPerPartition() { return maxHitsPerPartition; }
/** 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 nodes in a group which must be up for that group to receive queries */
public Double getMinGroupCoverage() { return minGroupCoverage; }
/** Returns the percentage of documents which must be available in a group for that group to receive queries */
public Double getMinActiveDocsCoverage() { return minActiveDocsCoverage; }
public static class Builder {
private Integer maxHitsPerPartition;
private DispatchPolicy dispatchPolicy;
private Double minGroupCoverage;
private Double minActiveDocsCoverage;
private Double topKProbability;
public DispatchTuning build() {
return new DispatchTuning(this);
}
public Builder setMaxHitsPerPartition(Integer maxHitsPerPartition) {
this.maxHitsPerPartition = maxHitsPerPartition;
return this;
}
public Builder setTopKProbability(Double topKProbability) {
this.topKProbability = topKProbability;
return this;
}
public Builder setDispatchPolicy(String policy) {
if (policy != null)
dispatchPolicy = toDispatchPolicy(policy);
return this;
}
private DispatchPolicy toDispatchPolicy(String policy) {
switch (policy.toLowerCase()) {
case "adaptive": case "random": return DispatchPolicy.ADAPTIVE; // TODO: Deprecate 'random' on Java 8
case "round-robin": return DispatchPolicy.ROUNDROBIN;
default: throw new IllegalArgumentException("Unknown dispatch policy '" + policy + "'");
}
}
public Builder setMinGroupCoverage(Double minGroupCoverage) {
this.minGroupCoverage = minGroupCoverage;
return this;
}
public Builder setMinActiveDocsCoverage(Double minCoverage) {
this.minActiveDocsCoverage = minCoverage;
return this;
}
}
}
|