summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-09-20 07:19:35 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2022-09-20 07:33:20 +0200
commit5a520ceea79a6fb1fde3dfd87845383c5779defc (patch)
tree6ce6c1f1e6d4c0942ede146e7efea0140059d743 /container-search
parent724af959b75915756818bcb03e85e25a8d21f616 (diff)
Chose correct "redundancy" for coverage estimation. Current default is to use searchable-copies.
But when we flip to use target-active directly from the backend we need to use redundancy.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java30
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java6
2 files changed, 21 insertions, 15 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java b/container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java
index 35d0a1f3231..4e19c8a2e22 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java
@@ -69,32 +69,34 @@ public class CoverageAggregator {
coverage.setDegradedReason(degradedReason);
return coverage;
}
- public CoverageAggregator adjustedDegradedCoverage(int searchableCopies, TimeoutHandler timeoutHandler) {
+ public CoverageAggregator adjustedDegradedCoverage(int redundancy, TimeoutHandler timeoutHandler) {
int askedAndFailed = askedNodes + failedNodes;
if (askedAndFailed == answeredNodesParticipated) {
return this;
}
int notAnswered = askedAndFailed - answeredNodesParticipated;
- if ((timeoutHandler.reason() == DEGRADED_BY_ADAPTIVE_TIMEOUT) && answeredNodesParticipated > 0) {
+ if (timeoutHandler.reason() == DEGRADED_BY_ADAPTIVE_TIMEOUT) {
CoverageAggregator clone = new CoverageAggregator(this);
- clone.answeredActiveDocs += (notAnswered * answeredActiveDocs / answeredNodesParticipated);
- clone.answeredTargetActiveDocs += (notAnswered * answeredTargetActiveDocs / answeredNodesParticipated);
- return clone;
+ return clone.adjustActiveDocs(notAnswered);
} else {
if (askedAndFailed > answeredNodesParticipated) {
- if (answeredNodesParticipated > 0) {
- CoverageAggregator clone = new CoverageAggregator(this);
- int missingNodes = notAnswered - (searchableCopies - 1);
- if (missingNodes > 0) {
- clone.answeredActiveDocs += (missingNodes * answeredActiveDocs / answeredNodesParticipated);
- clone.answeredTargetActiveDocs += (missingNodes * answeredTargetActiveDocs / answeredNodesParticipated);
- }
- clone.timedOut = true;
- return clone;
+ CoverageAggregator clone = new CoverageAggregator(this);
+ int missingNodes = notAnswered - (redundancy - 1);
+ if (missingNodes > 0) {
+ clone.adjustActiveDocs(missingNodes);
}
+ clone.timedOut = true;
+ return clone;
}
}
return this;
}
+ private CoverageAggregator adjustActiveDocs(int numMissingNodes) {
+ if (answeredNodesParticipated > 0) {
+ answeredActiveDocs += (numMissingNodes * answeredActiveDocs / answeredNodesParticipated);
+ answeredTargetActiveDocs += (numMissingNodes * answeredTargetActiveDocs / answeredNodesParticipated);
+ }
+ return this;
+ }
}
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java b/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java
index 167d780918a..2717b48839e 100644
--- a/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java
+++ b/container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java
@@ -127,7 +127,7 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM
groupingResultAggregator.toAggregatedHit().ifPresent(h -> result.getResult().hits().add(h));
insertNetworkErrors(result.getResult());
- CoverageAggregator adjusted = coverageAggregator.adjustedDegradedCoverage((int)searchCluster.dispatchConfig().searchableCopies(), timeoutHandler);
+ CoverageAggregator adjusted = coverageAggregator.adjustedDegradedCoverage(redundancyForCoverage(searchCluster.dispatchConfig()), timeoutHandler);
result.getResult().setCoverage(adjusted.createCoverage(timeoutHandler, searchCluster.dispatchConfig().computeCoverageFromTargetActiveDocs()));
int needed = query.getOffset() + query.getHits();
@@ -138,6 +138,10 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM
return result;
}
+ private int redundancyForCoverage(DispatchConfig config) {
+ return (int)(config.computeCoverageFromTargetActiveDocs() ? config.redundancy() : config.searchableCopies());
+ }
+
private void insertNetworkErrors(Result result) {
// Network errors will be reported as errors only when all nodes fail, otherwise they are just traced
boolean asErrors = coverageAggregator.hasNoAnswers();