zacharymorn commented on a change in pull request #128: URL: https://github.com/apache/lucene/pull/128#discussion_r642722424
########## File path: lucene/core/src/java/org/apache/lucene/index/CheckIndex.java ########## @@ -843,6 +812,258 @@ public Status checkIndex(List<String> onlySegments) throws IOException { return result; } + private void updateMaxSegmentName(Status result, SegmentCommitInfo info) { + long segmentName = Long.parseLong(info.info.name.substring(1), Character.MAX_RADIX); + if (segmentName > result.maxSegmentName) { + result.maxSegmentName = segmentName; + } + } + + private void processSegmentInfoStatusResult( + Status result, SegmentCommitInfo info, Status.SegmentInfoStatus segmentInfoStatus) { + result.segmentInfos.add(segmentInfoStatus); + if (segmentInfoStatus.error != null) { + result.totLoseDocCount += segmentInfoStatus.toLoseDocCount; + result.numBadSegments++; + } else { + // Keeper + result.newSegments.add(info.clone()); + } + } + + private <R> CompletableFuture<R> runAsyncSegmentCheck( + Callable<R> asyncCallable, ExecutorService executorService) { + return CompletableFuture.supplyAsync(callableToSupplier(asyncCallable), executorService); + } + + private <T> Supplier<T> callableToSupplier(Callable<T> callable) { + return () -> { + try { + return callable.call(); + } catch (RuntimeException | Error e) { + throw e; + } catch (Throwable e) { + throw new CompletionException(e); + } + }; + } + + private Status.SegmentInfoStatus testSegment( + SegmentInfos sis, SegmentCommitInfo info, PrintStream infoStream) throws IOException { + Status.SegmentInfoStatus segInfoStat = new Status.SegmentInfoStatus(); + segInfoStat.name = info.info.name; + segInfoStat.maxDoc = info.info.maxDoc(); + + final Version version = info.info.getVersion(); + if (info.info.maxDoc() <= 0) { + throw new CheckIndexException(" illegal number of documents: maxDoc=" + info.info.maxDoc()); + } + + int toLoseDocCount = info.info.maxDoc(); Review comment: I took a closer look at this code. I think the reason of inconsistency here is that, between `toLoseDocCount = info.info.maxDoc()` and `toLoseDocCount = reader.numDocs()`, there are a few places where exception can be thrown (e.g. `reader = new SegmentReader` may throw IOException), but we still want to catch the exception and add the value into result via `segInfoStat.toLoseDocCount = toLoseDocCount` (using maxDoc count as the upper bound). So I guess this inconsistency is intended? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org