Github user dweiss commented on a diff in the pull request:

    https://github.com/apache/lucene-solr/pull/502#discussion_r235063127
  
    --- Diff: lucene/core/src/java/org/apache/lucene/index/IndexWriter.java ---
    @@ -4398,42 +4426,41 @@ private int mergeMiddle(MergePolicy.OneMerge merge, 
MergePolicy mergePolicy) thr
     
           // Let the merge wrap readers
           List<CodecReader> mergeReaders = new ArrayList<>();
    -      int softDeleteCount = 0;
    +      Counter softDeleteCount = Counter.newCounter(false);
           for (int r = 0; r < merge.readers.size(); r++) {
             SegmentReader reader = merge.readers.get(r);
             CodecReader wrappedReader = merge.wrapForMerge(reader);
             validateMergeReader(wrappedReader);
             if (softDeletesEnabled) {
    +
               if (reader != wrappedReader) { // if we don't have a wrapped 
reader we won't preserve any soft-deletes
                 Bits hardLiveDocs = merge.hardLiveDocs.get(r);
    -            Bits wrappedLiveDocs = wrappedReader.getLiveDocs();
    -            int hardDeleteCount = 0;
    -            DocIdSetIterator softDeletedDocs = 
DocValuesFieldExistsQuery.getDocValuesDocIdSetIterator(config.getSoftDeletesField(),
 wrappedReader);
    -            if (softDeletedDocs != null) {
    -              int docId;
    -              while ((docId = softDeletedDocs.nextDoc()) != 
DocIdSetIterator.NO_MORE_DOCS) {
    -                if (wrappedLiveDocs == null || wrappedLiveDocs.get(docId)) 
{
    -                  if (hardLiveDocs == null || hardLiveDocs.get(docId)) {
    -                    softDeleteCount++;
    -                  } else {
    -                    hardDeleteCount++;
    +            if (hardLiveDocs != null) { // we only need to do this 
accounting if we have mixed deletes
    +              Bits wrappedLiveDocs = wrappedReader.getLiveDocs();
    +              int hardDeleteCount = countSoftDeletes(wrappedReader, 
wrappedLiveDocs, hardLiveDocs, softDeleteCount);
    --- End diff --
    
    hardDeleteCount var, yet countSoftDeletes() method looks odd. Maybe you 
could just pass two args (two counters) instead. It's not as pretty, but at 
least more intuitive?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to