diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-09-19 13:55:55 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-09-19 14:07:37 +0200 |
commit | 7d9ef2e10605f4af700a37a5c79a0a789fac527d (patch) | |
tree | 7f99d8adc579cc51cca5bd8160d786320a054b97 /container-search/src | |
parent | 2eeb7b8098d64290f3c08469457eaa76dd1bef05 (diff) |
Control whether to report coverage based on active or target active documents.
Diffstat (limited to 'container-search/src')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/dispatch/CoverageAggregator.java | 11 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java | 2 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/search/result/CoverageTestCase.java (renamed from container-search/src/test/java/com/yahoo/search/result/test/CoverageTestCase.java) | 25 |
3 files changed, 27 insertions, 11 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 877412d2e9b..35d0a1f3231 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 @@ -54,10 +54,11 @@ public class CoverageAggregator { this.failedNodes = failedNodes; } - public Coverage createCoverage(TimeoutHandler timeoutHandler) { + public Coverage createCoverage(TimeoutHandler timeoutHandler, boolean useTargetActiveForCoverageComputation) { Coverage coverage = new Coverage(answeredDocs, answeredActiveDocs, answeredNodesParticipated, 1); coverage.setNodesTried(askedNodes); coverage.setTargetActive(answeredTargetActiveDocs); + coverage.useTargetActiveForCoverageComputation(useTargetActiveForCoverageComputation); int degradedReason = 0; if (timedOut) { degradedReason |= timeoutHandler.reason(); @@ -82,11 +83,13 @@ public class CoverageAggregator { return clone; } else { if (askedAndFailed > answeredNodesParticipated) { - int missingNodes = notAnswered - (searchableCopies - 1); if (answeredNodesParticipated > 0) { CoverageAggregator clone = new CoverageAggregator(this); - clone.answeredActiveDocs += (missingNodes * answeredActiveDocs / answeredNodesParticipated); - clone.answeredTargetActiveDocs += (missingNodes * answeredTargetActiveDocs / answeredNodesParticipated); + int missingNodes = notAnswered - (searchableCopies - 1); + if (missingNodes > 0) { + clone.answeredActiveDocs += (missingNodes * answeredActiveDocs / answeredNodesParticipated); + clone.answeredTargetActiveDocs += (missingNodes * answeredTargetActiveDocs / answeredNodesParticipated); + } clone.timedOut = true; return clone; } 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 dcf9b56aa33..167d780918a 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 @@ -128,7 +128,7 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM insertNetworkErrors(result.getResult()); CoverageAggregator adjusted = coverageAggregator.adjustedDegradedCoverage((int)searchCluster.dispatchConfig().searchableCopies(), timeoutHandler); - result.getResult().setCoverage(adjusted.createCoverage(timeoutHandler)); + result.getResult().setCoverage(adjusted.createCoverage(timeoutHandler, searchCluster.dispatchConfig().computeCoverageFromTargetActiveDocs())); int needed = query.getOffset() + query.getHits(); for (int index = query.getOffset(); (index < merged.size()) && (index < needed); index++) { diff --git a/container-search/src/test/java/com/yahoo/search/result/test/CoverageTestCase.java b/container-search/src/test/java/com/yahoo/search/result/CoverageTestCase.java index f59a7a94f0a..e2675b09307 100644 --- a/container-search/src/test/java/com/yahoo/search/result/test/CoverageTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/result/CoverageTestCase.java @@ -1,9 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.search.result.test; +package com.yahoo.search.result; import com.yahoo.search.Query; import com.yahoo.search.Result; -import com.yahoo.search.result.Coverage; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -34,6 +33,17 @@ public class CoverageTestCase { } @Test + void testCoverageBasedOnActive() { + var c = new Coverage(8, 10).setTargetActive(16); + assertEquals(80, c.getResultPercentage()); + } + @Test + void testCoverageBasedOnTargetActive() { + var c = new Coverage(8, 10).setTargetActive(16).useTargetActiveForCoverageComputation(true); + assertEquals(50, c.getResultPercentage()); + } + + @Test void testDefaultCoverage() { boolean create = true; @@ -67,10 +77,7 @@ public class CoverageTestCase { assertEquals(1, federationSearcherResult.getCoverage(create).getResultSets()); } - @Test - void testCoverageConversion() { - Coverage c = new Coverage(6, 10); - c.setDegradedReason(7); + void verifyCoverageConversion(com.yahoo.container.handler.Coverage c) { com.yahoo.container.logging.Coverage lc = c.toLoggingCoverage(); assertEquals(lc.getDocs(), c.getDocs()); assertEquals(lc.getActive(), c.getActive()); @@ -83,4 +90,10 @@ public class CoverageTestCase { assertEquals(lc.isDegradedByTimeout(), c.isDegradedByTimeout()); } + @Test + void testCoverageConversion() { + verifyCoverageConversion(new Coverage(6, 10).setDegradedReason(7).setTargetActive(12).useTargetActiveForCoverageComputation(false)); + verifyCoverageConversion(new Coverage(6, 10).setDegradedReason(7).setTargetActive(12).useTargetActiveForCoverageComputation(true)); + } + } |