Skip to content

Commit 953aefa

Browse files
fix for stored fields force merge regression
Signed-off-by: bharath-techie <[email protected]>
1 parent d7b2afc commit 953aefa

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

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

+7
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,11 @@ protected StoredFieldsReader() {}
5555
public StoredFieldsReader getMergeInstance() {
5656
return this;
5757
}
58+
59+
/**
60+
* Optional: reset or close merge resources used in the reader
61+
*
62+
* <p>The default implementation is empty
63+
*/
64+
public void finishMerge() throws IOException {}
5865
}

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

+7
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,16 @@ public int merge(MergeState mergeState) throws IOException {
155155
docCount++;
156156
}
157157
finish(docCount);
158+
finishMerge(mergeState);
158159
return docCount;
159160
}
160161

162+
public void finishMerge(MergeState mergeState) throws IOException {
163+
for (int i = 0; i < mergeState.storedFieldsReaders.length; i++) {
164+
mergeState.storedFieldsReaders[i].finishMerge();
165+
}
166+
}
167+
161168
/**
162169
* A visitor that adds every field it sees.
163170
*

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

+12
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,13 @@ private Lucene90CompressingStoredFieldsReader(
104104
this.version = reader.version;
105105
this.fieldInfos = reader.fieldInfos;
106106
this.fieldsStream = reader.fieldsStream.clone();
107+
if (merging) {
108+
try {
109+
this.fieldsStream.updateReadAdvice(ReadAdvice.SEQUENTIAL);
110+
} catch (IOException e) {
111+
throw new AlreadyClosedException("failed to update read advice", e);
112+
}
113+
}
107114
this.indexReader = reader.indexReader.clone();
108115
this.maxPointer = reader.maxPointer;
109116
this.chunkSize = reader.chunkSize;
@@ -257,6 +264,11 @@ public void close() throws IOException {
257264
}
258265
}
259266

267+
@Override
268+
public void finishMerge() throws IOException {
269+
this.fieldsStream.updateReadAdvice(ReadAdvice.RANDOM);
270+
}
271+
260272
private static void readField(DataInput in, StoredFieldVisitor visitor, FieldInfo info, int bits)
261273
throws IOException {
262274
switch (bits & TYPE_MASK) {

0 commit comments

Comments
 (0)