Skip to content

Commit a34cefd

Browse files
authored
Check if merge is aborted before executing file integrity checks (#16264)
Adds OneMerge to the MergeState so that merge writers and consumers can check the abort flag before starting each reader's checkIntegrity(). This avoids kicking off costly full-file checksums on segments when the merge has already been aborted.
1 parent 61ae181 commit a34cefd

18 files changed

Lines changed: 53 additions & 11 deletions

lucene/CHANGES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,9 @@ Improvements
410410
DiversifiedTopDocsCollector, removing usages of the deprecated IndexSearcher#search(Query, Collector).
411411
(Luca Cavanna)
412412

413+
* GITHUB#16264: Check if merge is aborted before executing file integrity checks to avoid
414+
costly full-file checksums on segments when the merge has already been cancelled. (Tanguy Leroux)
415+
413416
Optimizations
414417
---------------------
415418
* GITHUB#16111: Optimize FieldExistsQuery.count() when all docs have the field. (Prithvi S)

lucene/core/src/java/org/apache/lucene/codecs/DocValuesConsumer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ public abstract void addSortedSetField(FieldInfo field, DocValuesProducer values
132132
public void merge(MergeState mergeState) throws IOException {
133133
for (DocValuesProducer docValuesProducer : mergeState.docValuesProducers) {
134134
if (docValuesProducer != null) {
135+
mergeState.checkAborted();
135136
docValuesProducer.checkIntegrity();
136137
}
137138
}

lucene/core/src/java/org/apache/lucene/codecs/FieldsConsumer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public void merge(MergeState mergeState, NormsProducer norms) throws IOException
8080

8181
final int maxDoc = mergeState.maxDocs[readerIndex];
8282
if (f != null) {
83+
mergeState.checkAborted();
8384
f.checkIntegrity();
8485
slices.add(new ReaderSlice(docBase, maxDoc, readerIndex));
8586
fields.add(f);

lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsWriter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ public final void merge(MergeState mergeState) throws IOException {
113113
KnnVectorsReader reader = mergeState.knnVectorsReaders[i];
114114
assert reader != null || mergeState.fieldInfos[i].hasVectorValues() == false;
115115
if (reader != null) {
116+
mergeState.checkAborted();
116117
reader.checkIntegrity();
117118
}
118119
}

lucene/core/src/java/org/apache/lucene/codecs/NormsConsumer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public abstract void addNormsField(FieldInfo field, NormsProducer normsProducer)
6666
public void merge(MergeState mergeState) throws IOException {
6767
for (NormsProducer normsProducer : mergeState.normsProducers) {
6868
if (normsProducer != null) {
69+
mergeState.checkAborted();
6970
normsProducer.checkIntegrity();
7071
}
7172
}

lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ public void merge(MergeState mergeState) throws IOException {
222222
// check each incoming reader
223223
for (PointsReader reader : mergeState.pointsReaders) {
224224
if (reader != null) {
225+
mergeState.checkAborted();
225226
reader.checkIntegrity();
226227
}
227228
}

lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsWriter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ public int merge(MergeState mergeState) throws IOException {
130130
List<StoredFieldsMergeSub> subs = new ArrayList<>();
131131
for (int i = 0; i < mergeState.storedFieldsReaders.length; i++) {
132132
StoredFieldsReader storedFieldsReader = mergeState.storedFieldsReaders[i];
133+
mergeState.checkAborted();
133134
storedFieldsReader.checkIntegrity();
134135
subs.add(
135136
new StoredFieldsMergeSub(

lucene/core/src/java/org/apache/lucene/codecs/TermVectorsWriter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ public int merge(MergeState mergeState) throws IOException {
200200
for (int i = 0; i < mergeState.termVectorsReaders.length; i++) {
201201
TermVectorsReader reader = mergeState.termVectorsReaders[i];
202202
if (reader != null) {
203+
mergeState.checkAborted();
203204
reader.checkIntegrity();
204205
}
205206
subs.add(new TermVectorsMergeSub(mergeState.docMaps[i], reader, mergeState.maxDocs[i]));

lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90PointsWriter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ public void merge(MergeState mergeState) throws IOException {
204204
}
205205
for (PointsReader reader : mergeState.pointsReaders) {
206206
if (reader != null) {
207+
mergeState.checkAborted();
207208
reader.checkIntegrity();
208209
}
209210
}

lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingStoredFieldsWriter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,7 @@ public int merge(MergeState mergeState) throws IOException {
601601
new ArrayList<>(mergeState.storedFieldsReaders.length);
602602
for (int i = 0; i < mergeState.storedFieldsReaders.length; i++) {
603603
final StoredFieldsReader reader = mergeState.storedFieldsReaders[i];
604+
mergeState.checkAborted();
604605
reader.checkIntegrity();
605606
MergeStrategy mergeStrategy = getMergeStrategy(mergeState, matchingReaders, i);
606607
if (mergeStrategy == MergeStrategy.VISITOR) {

0 commit comments

Comments
 (0)