diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-03-25 15:07:58 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-03-25 15:07:58 +0000 |
commit | 0df83ffb7a858fce86ab5b5156ac86ab56b67284 (patch) | |
tree | a0d387709ec1ff15022ca203afadcfe3e1328d37 /container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java | |
parent | fe47a33d4d950ad91f6e82abc54555c1c2b9c499 (diff) |
add more debug logging about hit merging
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/dispatch/InterleavedSearchInvoker.java | 38 |
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; } |