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. */