You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dn...@apache.org on 2021/07/29 14:17:40 UTC

[lucene-solr] branch branch_8x updated: LUCENE-10032: Remove leafDocMaps from MergeState (#2536)

This is an automated email from the ASF dual-hosted git repository.

dnhatn pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new c2cb22f  LUCENE-10032: Remove leafDocMaps from MergeState (#2536)
c2cb22f is described below

commit c2cb22f993605e7b0fd1c68d690aaff3a751162a
Author: Nhat Nguyen <nh...@elastic.co>
AuthorDate: Thu Jul 29 10:17:19 2021 -0400

    LUCENE-10032: Remove leafDocMaps from MergeState (#2536)
    
    These maps are no longer useful after LUCENE-8505.
---
 .../java/org/apache/lucene/index/IndexWriter.java  | 12 +++----
 .../java/org/apache/lucene/index/MergeState.java   | 39 ++++------------------
 2 files changed, 12 insertions(+), 39 deletions(-)

diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
index 9a630a9..32ef1fc 100644
--- a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
@@ -4026,10 +4026,8 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable,
       assert rld != null: "seg=" + info.info.name;
 
       MergeState.DocMap segDocMap = mergeState.docMaps[i];
-      MergeState.DocMap segLeafDocMap = mergeState.leafDocMaps[i];
-
       carryOverHardDeletes(mergedDeletesAndUpdates, maxDoc, mergeState.liveDocs[i],  merge.getMergeReader().get(i).hardLiveDocs, rld.getHardLiveDocs(),
-          segDocMap, segLeafDocMap);
+          segDocMap);
 
       // Now carry over all doc values updates that were resolved while we were merging, remapping the docIDs to the newly merged docIDs.
       // We only carry over packets that finished resolving; if any are still running (concurrently) they will detect that our merge completed
@@ -4072,7 +4070,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable,
           DocValuesFieldUpdates.Iterator it = updates.iterator();
           int doc;
           while ((doc = it.nextDoc()) != NO_MORE_DOCS) {
-            int mappedDoc = segDocMap.get(segLeafDocMap.get(doc));
+            int mappedDoc = segDocMap.get(doc);
             if (mappedDoc != -1) {
               if (it.hasValue()) {
                 // not deleted
@@ -4123,7 +4121,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable,
                                            Bits mergeLiveDocs, // the liveDocs used to build the segDocMaps
                                            Bits prevHardLiveDocs, // the hard deletes when the merge reader was pulled
                                            Bits currentHardLiveDocs, // the current hard deletes
-                                           MergeState.DocMap segDocMap, MergeState.DocMap segLeafDocMap) throws IOException {
+                                           MergeState.DocMap segDocMap) throws IOException {
 
     assert mergeLiveDocs == null || mergeLiveDocs.length() == maxDoc;
     // if we mix soft and hard deletes we need to make sure that we only carry over deletes
@@ -4163,7 +4161,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable,
             assert currentHardLiveDocs.get(j) == false;
           } else if (carryOverDelete.test(j)) {
             // the document was deleted while we were merging:
-            mergedReadersAndUpdates.delete(segDocMap.get(segLeafDocMap.get(j)));
+            mergedReadersAndUpdates.delete(segDocMap.get(j));
           }
         }
       }
@@ -4173,7 +4171,7 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable,
       // does:
       for (int j = 0; j < maxDoc; j++) {
         if (carryOverDelete.test(j)) {
-          mergedReadersAndUpdates.delete(segDocMap.get(segLeafDocMap.get(j)));
+          mergedReadersAndUpdates.delete(segDocMap.get(j));
         }
       }
     }
diff --git a/lucene/core/src/java/org/apache/lucene/index/MergeState.java b/lucene/core/src/java/org/apache/lucene/index/MergeState.java
index 0e47a5a..1f4d339 100644
--- a/lucene/core/src/java/org/apache/lucene/index/MergeState.java
+++ b/lucene/core/src/java/org/apache/lucene/index/MergeState.java
@@ -18,7 +18,6 @@ package org.apache.lucene.index;
 
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
@@ -44,9 +43,6 @@ public class MergeState {
   /** Maps document IDs from old segments to document IDs in the new segment */
   public final DocMap[] docMaps;
 
-  // Only used by IW when it must remap deletes that arrived against the merging segments while a merge was running:
-  final DocMap[] leafDocMaps;
-
   /** {@link SegmentInfo} of the newly merged segment. */
   public final SegmentInfo segmentInfo;
 
@@ -87,14 +83,10 @@ public class MergeState {
   public boolean needsIndexSort;
 
   /** Sole constructor. */
-  MergeState(List<CodecReader> originalReaders, SegmentInfo segmentInfo, InfoStream infoStream) throws IOException {
-
+  MergeState(List<CodecReader> readers, SegmentInfo segmentInfo, InfoStream infoStream) throws IOException {
+    verifyIndexSort(readers, segmentInfo);
     this.infoStream = infoStream;
-
-    final Sort indexSort = segmentInfo.getIndexSort();
-    int numReaders = originalReaders.size();
-    leafDocMaps = new DocMap[numReaders];
-    List<CodecReader> readers = maybeSortReaders(originalReaders, segmentInfo);
+    int numReaders = readers.size();
 
     maxDocs = new int[numReaders];
     fieldsProducers = new FieldsProducer[numReaders];
@@ -145,7 +137,7 @@ public class MergeState {
     segmentInfo.setMaxDoc(numDocs);
 
     this.segmentInfo = segmentInfo;
-    this.docMaps = buildDocMaps(readers, indexSort);
+    this.docMaps = buildDocMaps(readers, segmentInfo.getIndexSort());
   }
 
   // Remap docIDs around deletions
@@ -208,35 +200,18 @@ public class MergeState {
     }
   }
 
-  private List<CodecReader> maybeSortReaders(List<CodecReader> originalReaders, SegmentInfo segmentInfo) throws IOException {
-
-    // Default to identity:
-    for(int i=0;i<originalReaders.size();i++) {
-      leafDocMaps[i] = new DocMap() {
-          @Override
-          public int get(int docID) {
-            return docID;
-          }
-        };
-    }
-
+  private static void verifyIndexSort(List<CodecReader> readers, SegmentInfo segmentInfo) {
     Sort indexSort = segmentInfo.getIndexSort();
     if (indexSort == null) {
-      return originalReaders;
+      return;
     }
-
-    List<CodecReader> readers = new ArrayList<>(originalReaders.size());
-
-    for (CodecReader leaf : originalReaders) {
+    for (CodecReader leaf : readers) {
       Sort segmentSort = leaf.getMetaData().getSort();
       if (segmentSort == null || isCongruentSort(indexSort, segmentSort) == false) {
         throw new IllegalArgumentException("index sort mismatch: merged segment has sort=" + indexSort +
             " but to-be-merged segment has sort=" + (segmentSort == null ? "null" : segmentSort));
       }
-      readers.add(leaf);
     }
-
-    return readers;
   }
 
   /** A map of doc IDs. */