aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-03-25 15:07:58 +0000
committerArne Juul <arnej@verizonmedia.com>2021-03-25 15:07:58 +0000
commit0df83ffb7a858fce86ab5b5156ac86ab56b67284 (patch)
treea0d387709ec1ff15022ca203afadcfe3e1328d37 /container-search
parentfe47a33d4d950ad91f6e82abc54555c1c2b9c499 (diff)
add more debug logging about hit merging
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java38
1 files changed, 33 insertions, 5 deletions
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 c60e1bf39cb..f777fdeca26 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
@@ -202,6 +202,17 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM
return nextAdaptive;
}
+ private String dbg(LeanHit hit) {
+ var buf = new StringBuilder();
+ buf.append("LeanHit[");
+ if (hit.hasSortData()) buf.append("hasSortData,");
+ buf.append("relevance=").append(hit.getRelevance());
+ buf.append(",partId=").append(hit.getPartId());
+ buf.append(",distributionKey=").append(hit.getDistributionKey());
+ buf.append("]");
+ return buf.toString();
+ }
+
private List<LeanHit> mergeResult(Result result, InvokerResult partialResult, List<LeanHit> current) {
collectCoverage(partialResult.getResult().getCoverage(true));
@@ -224,28 +235,45 @@ public class InterleavedSearchInvoker extends SearchInvoker implements ResponseM
List<LeanHit> merged = new ArrayList<>(needed);
int indexCurrent = 0;
int indexPartial = 0;
+ log.fine(() -> "Merging "+current.size()+" and "+partial.size()+" lean hits (want "+needed+")");
while (indexCurrent < current.size() && indexPartial < partial.size() && merged.size() < needed) {
- LeanHit incommingHit = partial.get(indexPartial);
+ LeanHit incomingHit = partial.get(indexPartial);
LeanHit currentHit = current.get(indexCurrent);
- int cmpRes = currentHit.compareTo(incommingHit);
+ int cmpRes = currentHit.compareTo(incomingHit);
if (cmpRes < 0) {
+ log.fine(() -> "Prefer current "+dbg(currentHit));
merged.add(currentHit);
indexCurrent++;
} else if (cmpRes > 0) {
- merged.add(incommingHit);
+ log.fine(() -> "Prefer incoming "+dbg(incomingHit));
+ merged.add(incomingHit);
indexPartial++;
} else { // Duplicates
+ log.fine(() -> "Equal, prefer current "+dbg(currentHit)+" before incoming "+dbg(incomingHit));
merged.add(currentHit);
indexCurrent++;
indexPartial++;
}
}
while ((indexCurrent < current.size()) && (merged.size() < needed)) {
- merged.add(current.get(indexCurrent++));
+ LeanHit currentHit = current.get(indexCurrent++);
+ log.fine(() -> "Also use current "+dbg(currentHit));
+ merged.add(currentHit);
+ }
+ while (indexCurrent < current.size()) {
+ LeanHit currentHit = current.get(indexCurrent++);
+ log.fine(() -> "Do not use current "+dbg(currentHit));
+ merged.add(currentHit);
}
while ((indexPartial < partial.size()) && (merged.size() < needed)) {
- merged.add(partial.get(indexPartial++));
+ LeanHit incomingHit = partial.get(indexPartial++);
+ log.fine(() -> "Also use incoming "+dbg(incomingHit));
+ merged.add(incomingHit);
+ }
+ while (indexPartial < partial.size()) {
+ LeanHit incomingHit = partial.get(indexPartial++);
+ log.fine(() -> "Do not use incoming "+dbg(incomingHit));
}
return merged;
}