diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene101/Lucene101PostingsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene101/Lucene101PostingsReader.java index 08df1b13effb..c30b6bd96018 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene101/Lucene101PostingsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene101/Lucene101PostingsReader.java @@ -38,6 +38,7 @@ import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.store.ByteArrayDataInput; @@ -1404,15 +1405,15 @@ static FreqAndNormBuffer readImpacts(ByteArrayDataInput in, FreqAndNormBuffer re } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { if (docIn != null) { - CodecUtil.checksumEntireFile(docIn); + CodecUtil.checksumEntireFile(docIn, merge); } if (posIn != null) { - CodecUtil.checksumEntireFile(posIn); + CodecUtil.checksumEntireFile(posIn, merge); } if (payIn != null) { - CodecUtil.checksumEntireFile(payIn); + CodecUtil.checksumEntireFile(payIn, merge); } } diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene102/Lucene102BinaryQuantizedVectorsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene102/Lucene102BinaryQuantizedVectorsReader.java index a9683ab80394..3bf41e40dfbf 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene102/Lucene102BinaryQuantizedVectorsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene102/Lucene102BinaryQuantizedVectorsReader.java @@ -43,6 +43,7 @@ import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.KnnVectorValues; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; import org.apache.lucene.index.VectorEncoding; @@ -211,9 +212,9 @@ public RandomVectorScorer getRandomVectorScorer(String field, byte[] target) thr } @Override - public void checkIntegrity() throws IOException { - rawVectorsReader.checkIntegrity(); - CodecUtil.checksumEntireFile(quantizedVectorData); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + rawVectorsReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(quantizedVectorData, merge); } @Override diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene103/Lucene103PostingsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene103/Lucene103PostingsReader.java index 617550ec6a1d..1744a86a3bab 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene103/Lucene103PostingsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene103/Lucene103PostingsReader.java @@ -38,6 +38,7 @@ import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.search.DocAndFloatFeatureBuffer; @@ -1449,15 +1450,15 @@ static FreqAndNormBuffer readImpacts(ByteArrayDataInput in, FreqAndNormBuffer re } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { if (docIn != null) { - CodecUtil.checksumEntireFile(docIn); + CodecUtil.checksumEntireFile(docIn, merge); } if (posIn != null) { - CodecUtil.checksumEntireFile(posIn); + CodecUtil.checksumEntireFile(posIn, merge); } if (payIn != null) { - CodecUtil.checksumEntireFile(payIn); + CodecUtil.checksumEntireFile(payIn, merge); } } diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/Lucene80DocValuesProducer.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/Lucene80DocValuesProducer.java index 03f2f10d3599..eb47401755ad 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/Lucene80DocValuesProducer.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/Lucene80DocValuesProducer.java @@ -31,6 +31,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; @@ -1683,8 +1684,8 @@ public DocValuesSkipper getSkipper(FieldInfo field) { } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(data); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(data, merge); } /** diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/Lucene90HnswVectorsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/Lucene90HnswVectorsReader.java index 351c96bad60b..15f531cf8d1f 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/Lucene90HnswVectorsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/Lucene90HnswVectorsReader.java @@ -32,6 +32,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.VectorSimilarityFunction; import org.apache.lucene.internal.hppc.IntObjectHashMap; @@ -218,9 +219,9 @@ private FieldEntry readField(IndexInput input, FieldInfo info) throws IOExceptio } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(vectorData); - CodecUtil.checksumEntireFile(vectorIndex); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(vectorData, merge); + CodecUtil.checksumEntireFile(vectorIndex, merge); } private FieldEntry getFieldEntry(String field) { diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/Lucene90PostingsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/Lucene90PostingsReader.java index 27345b94ada3..219b42ac4637 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/Lucene90PostingsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/Lucene90PostingsReader.java @@ -36,6 +36,7 @@ import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SlowImpactsEnum; @@ -2042,15 +2043,15 @@ public long cost() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { if (docIn != null) { - CodecUtil.checksumEntireFile(docIn); + CodecUtil.checksumEntireFile(docIn, merge); } if (posIn != null) { - CodecUtil.checksumEntireFile(posIn); + CodecUtil.checksumEntireFile(posIn, merge); } if (payIn != null) { - CodecUtil.checksumEntireFile(payIn); + CodecUtil.checksumEntireFile(payIn, merge); } } diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/blocktree/Lucene90BlockTreeTermsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/blocktree/Lucene90BlockTreeTermsReader.java index 1559404f50f5..361027c4b4d3 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/blocktree/Lucene90BlockTreeTermsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene90/blocktree/Lucene90BlockTreeTermsReader.java @@ -29,6 +29,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.Terms; import org.apache.lucene.internal.hppc.IntCursor; @@ -327,15 +328,15 @@ public int size() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // terms index - CodecUtil.checksumEntireFile(indexIn); + CodecUtil.checksumEntireFile(indexIn, merge); // term dictionary - CodecUtil.checksumEntireFile(termsIn); + CodecUtil.checksumEntireFile(termsIn, merge); // postings - postingsReader.checkIntegrity(); + postingsReader.checkIntegrity(merge); } @Override diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene91/Lucene91HnswVectorsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene91/Lucene91HnswVectorsReader.java index 2c99e782f2eb..16df0ba4ca90 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene91/Lucene91HnswVectorsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene91/Lucene91HnswVectorsReader.java @@ -34,6 +34,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.VectorSimilarityFunction; import org.apache.lucene.internal.hppc.IntObjectHashMap; @@ -214,9 +215,9 @@ private FieldEntry readField(IndexInput input, FieldInfo info) throws IOExceptio } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(vectorData); - CodecUtil.checksumEntireFile(vectorIndex); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(vectorData, merge); + CodecUtil.checksumEntireFile(vectorIndex, merge); } private FieldEntry getFieldEntry(String field) { diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene912/Lucene912PostingsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene912/Lucene912PostingsReader.java index 6945a67a20b2..5267d9525212 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene912/Lucene912PostingsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene912/Lucene912PostingsReader.java @@ -38,6 +38,7 @@ import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SlowImpactsEnum; @@ -1795,15 +1796,15 @@ static FreqAndNormBuffer readImpacts(ByteArrayDataInput in, FreqAndNormBuffer re } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { if (docIn != null) { - CodecUtil.checksumEntireFile(docIn); + CodecUtil.checksumEntireFile(docIn, merge); } if (posIn != null) { - CodecUtil.checksumEntireFile(posIn); + CodecUtil.checksumEntireFile(posIn, merge); } if (payIn != null) { - CodecUtil.checksumEntireFile(payIn); + CodecUtil.checksumEntireFile(payIn, merge); } } diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene92/Lucene92HnswVectorsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene92/Lucene92HnswVectorsReader.java index a749e74c7fbd..dbcc8873db26 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene92/Lucene92HnswVectorsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene92/Lucene92HnswVectorsReader.java @@ -33,6 +33,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.VectorSimilarityFunction; import org.apache.lucene.internal.hppc.IntObjectHashMap; @@ -211,9 +212,9 @@ private FieldEntry readField(IndexInput input, FieldInfo info) throws IOExceptio } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(vectorData); - CodecUtil.checksumEntireFile(vectorIndex); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(vectorData, merge); + CodecUtil.checksumEntireFile(vectorIndex, merge); } private FieldEntry getFieldEntry(String field) { diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene94/Lucene94HnswVectorsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene94/Lucene94HnswVectorsReader.java index 3bacd40482a5..3cdd05201565 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene94/Lucene94HnswVectorsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene94/Lucene94HnswVectorsReader.java @@ -33,6 +33,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.VectorEncoding; import org.apache.lucene.index.VectorSimilarityFunction; @@ -229,9 +230,9 @@ private FieldEntry readField(IndexInput input, FieldInfo info) throws IOExceptio } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(vectorData); - CodecUtil.checksumEntireFile(vectorIndex); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(vectorData, merge); + CodecUtil.checksumEntireFile(vectorIndex, merge); } private FieldEntry getFieldEntryOrThrow(String field) { diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene95/Lucene95HnswVectorsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene95/Lucene95HnswVectorsReader.java index 20571783ab67..de4e1ef9f597 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene95/Lucene95HnswVectorsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene95/Lucene95HnswVectorsReader.java @@ -37,6 +37,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.VectorEncoding; import org.apache.lucene.index.VectorSimilarityFunction; @@ -229,9 +230,9 @@ private FieldEntry readField(IndexInput input, FieldInfo info) throws IOExceptio } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(vectorData); - CodecUtil.checksumEntireFile(vectorIndex); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(vectorData, merge); + CodecUtil.checksumEntireFile(vectorIndex, merge); } private FieldEntry getFieldEntryOrThrow(String field) { diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene99/Lucene99PostingsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene99/Lucene99PostingsReader.java index 1cfdeed28841..e5f08d419928 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene99/Lucene99PostingsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene99/Lucene99PostingsReader.java @@ -36,6 +36,7 @@ import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SlowImpactsEnum; @@ -2075,15 +2076,15 @@ private void prefetchSkipData(IndexInput docIn, long docStartFP, long skipOffset } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { if (docIn != null) { - CodecUtil.checksumEntireFile(docIn); + CodecUtil.checksumEntireFile(docIn, merge); } if (posIn != null) { - CodecUtil.checksumEntireFile(posIn); + CodecUtil.checksumEntireFile(posIn, merge); } if (payIn != null) { - CodecUtil.checksumEntireFile(payIn); + CodecUtil.checksumEntireFile(payIn, merge); } } diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene99/Lucene99ScalarQuantizedVectorsReader.java b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene99/Lucene99ScalarQuantizedVectorsReader.java index 17eebc3ddc9d..2fbcf8352b23 100644 --- a/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene99/Lucene99ScalarQuantizedVectorsReader.java +++ b/lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene99/Lucene99ScalarQuantizedVectorsReader.java @@ -34,6 +34,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; import org.apache.lucene.index.VectorEncoding; @@ -166,9 +167,9 @@ static void validateFieldEntry(FieldInfo info, FieldEntry fieldEntry) { } @Override - public void checkIntegrity() throws IOException { - rawVectorsReader.checkIntegrity(); - CodecUtil.checksumEntireFile(quantizedVectorData); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + rawVectorsReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(quantizedVectorData, merge); } private FieldEntry getFieldEntry(String field) { diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java index e24b2f3b46b0..2c3767bb6164 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java @@ -30,6 +30,7 @@ import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.TermState; @@ -867,11 +868,11 @@ public String toString() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // verify terms - CodecUtil.checksumEntireFile(in); + CodecUtil.checksumEntireFile(in, merge); // verify postings - postingsReader.checkIntegrity(); + postingsReader.checkIntegrity(merge); } } diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsBlockTreeTermsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsBlockTreeTermsReader.java index e00d234b2afa..55a045256a2b 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsBlockTreeTermsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/blocktreeords/OrdsBlockTreeTermsReader.java @@ -28,6 +28,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.Terms; import org.apache.lucene.store.IndexInput; @@ -226,12 +227,12 @@ public int size() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // term dictionary - CodecUtil.checksumEntireFile(in); + CodecUtil.checksumEntireFile(in, merge); // postings - postingsReader.checkIntegrity(); + postingsReader.checkIntegrity(merge); } @Override diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java b/lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java index 1243c20b42fb..2e3ef1c02207 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java @@ -34,6 +34,7 @@ import org.apache.lucene.index.Fields; import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -387,8 +388,8 @@ public String toString() { } @Override - public void checkIntegrity() throws IOException { - delegateFieldsProducer.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegateFieldsProducer.checkIntegrity(merge); } @Override diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java index 24b6fe188bee..e939a18c23b4 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java @@ -30,6 +30,7 @@ import org.apache.lucene.index.Fields; import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.OrdTermState; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; @@ -106,7 +107,7 @@ public FieldsProducer fieldsProducer(SegmentReadState state) throws IOException if (state.context.context() != IOContext.Context.MERGE) { FieldsProducer loadedPostings; try { - postings.checkIntegrity(); + postings.checkIntegrity(null); loadedPostings = new DirectFields(state, postings, minSkipCount, lowFreqCutoff); } finally { postings.close(); @@ -148,7 +149,7 @@ public int size() { public void close() {} @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // if we read entirely into ram, we already validated. // otherwise returned the raw postings reader } diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java index 397d08827fca..06c9ab77d039 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java @@ -32,6 +32,7 @@ import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.index.SegmentReadState; @@ -787,7 +788,7 @@ public String toString() { } @Override - public void checkIntegrity() throws IOException { - postingsReader.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + postingsReader.checkIntegrity(merge); } } diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java index cceb1fcbef47..4941bc252111 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java @@ -58,6 +58,7 @@ import org.apache.lucene.index.DocValuesType; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SortedDocValues; @@ -882,7 +883,7 @@ public String toString() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { BytesRefBuilder scratch = new BytesRefBuilder(); IndexInput clone = data.clone(); clone.seek(0); diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java index 71e44fb0f82f..afa82ea2479b 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java @@ -42,6 +42,7 @@ import org.apache.lucene.index.Impacts; import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SlowImpactsEnum; @@ -844,5 +845,5 @@ public String toString() { } @Override - public void checkIntegrity() throws IOException {} + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException {} } diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextKnnVectorsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextKnnVectorsReader.java index 4927bd73042b..ae17f4770a06 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextKnnVectorsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextKnnVectorsReader.java @@ -34,6 +34,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.VectorSimilarityFunction; import org.apache.lucene.internal.hppc.IntObjectHashMap; @@ -239,7 +240,7 @@ public void search(String field, byte[] target, KnnCollector knnCollector, Accep } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { IndexInput clone = dataIn.clone(); clone.seek(0); diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextNormsFormat.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextNormsFormat.java index 371b02eefb64..1301986c2972 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextNormsFormat.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextNormsFormat.java @@ -22,6 +22,7 @@ import org.apache.lucene.codecs.NormsProducer; import org.apache.lucene.index.EmptyDocValuesProducer; import org.apache.lucene.index.FieldInfo; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -73,8 +74,8 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { - impl.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + impl.checkIntegrity(merge); } @Override diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsReader.java index 087c1f80836b..bc9efa63d3e5 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextPointsReader.java @@ -41,6 +41,7 @@ import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PointValues; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.store.BufferedChecksumIndexInput; @@ -217,7 +218,7 @@ public PointValues getValues(String fieldName) { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { BytesRefBuilder scratch = new BytesRefBuilder(); IndexInput clone = dataIn.clone(); clone.seek(0); diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextStoredFieldsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextStoredFieldsReader.java index ff396af78a4f..26045b4b3f95 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextStoredFieldsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextStoredFieldsReader.java @@ -36,6 +36,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.index.StoredFieldVisitor; import org.apache.lucene.store.AlreadyClosedException; @@ -225,5 +226,5 @@ public String toString() { } @Override - public void checkIntegrity() throws IOException {} + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException {} } diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java index 5306cee211e6..3fcfea27fd1d 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java @@ -44,6 +44,7 @@ import org.apache.lucene.index.Fields; import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.index.SlowImpactsEnum; @@ -589,5 +590,5 @@ public String toString() { } @Override - public void checkIntegrity() throws IOException {} + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException {} } diff --git a/lucene/codecs/src/java/org/apache/lucene/codecs/uniformsplit/UniformSplitTermsReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/uniformsplit/UniformSplitTermsReader.java index 39a234b0eb48..1aa6187d9226 100644 --- a/lucene/codecs/src/java/org/apache/lucene/codecs/uniformsplit/UniformSplitTermsReader.java +++ b/lucene/codecs/src/java/org/apache/lucene/codecs/uniformsplit/UniformSplitTermsReader.java @@ -38,6 +38,7 @@ import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.Terms; import org.apache.lucene.store.ByteArrayDataInput; @@ -269,12 +270,12 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // term dictionary - CodecUtil.checksumEntireFile(blockInput); + CodecUtil.checksumEntireFile(blockInput, merge); // postings - postingsReader.checkIntegrity(); + postingsReader.checkIntegrity(merge); } @Override diff --git a/lucene/codecs/src/test/org/apache/lucene/codecs/uniformsplit/TestTermBytesComparator.java b/lucene/codecs/src/test/org/apache/lucene/codecs/uniformsplit/TestTermBytesComparator.java index e1bec2ea3f55..72497516f6e6 100644 --- a/lucene/codecs/src/test/org/apache/lucene/codecs/uniformsplit/TestTermBytesComparator.java +++ b/lucene/codecs/src/test/org/apache/lucene/codecs/uniformsplit/TestTermBytesComparator.java @@ -24,6 +24,7 @@ import org.apache.lucene.codecs.PostingsReaderBase; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.ImpactsEnum; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.TermsEnum; @@ -181,7 +182,7 @@ public ImpactsEnum impacts(FieldInfo fieldInfo, BlockTermState state, int flags) } @Override - public void checkIntegrity() {} + public void checkIntegrity(MergePolicy.OneMerge merge) {} @Override public void close() {} diff --git a/lucene/codecs/src/test/org/apache/lucene/codecs/uniformsplit/sharedterms/TestSTBlockReader.java b/lucene/codecs/src/test/org/apache/lucene/codecs/uniformsplit/sharedterms/TestSTBlockReader.java index b2190c19ffeb..148d55485179 100644 --- a/lucene/codecs/src/test/org/apache/lucene/codecs/uniformsplit/sharedterms/TestSTBlockReader.java +++ b/lucene/codecs/src/test/org/apache/lucene/codecs/uniformsplit/sharedterms/TestSTBlockReader.java @@ -40,6 +40,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.VectorEncoding; @@ -292,7 +293,7 @@ public ImpactsEnum impacts(FieldInfo fieldInfo, BlockTermState state, int flags) } @Override - public void checkIntegrity() {} + public void checkIntegrity(MergePolicy.OneMerge merge) {} @Override public void close() {} diff --git a/lucene/core/src/java/org/apache/lucene/codecs/CodecUtil.java b/lucene/core/src/java/org/apache/lucene/codecs/CodecUtil.java index 91c1c045247d..c1c9500e29f0 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/CodecUtil.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/CodecUtil.java @@ -22,6 +22,7 @@ import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexFormatTooNewException; import org.apache.lucene.index.IndexFormatTooOldException; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.store.BufferedChecksumIndexInput; import org.apache.lucene.store.ChecksumIndexInput; import org.apache.lucene.store.DataInput; @@ -597,6 +598,13 @@ private static void validateFooter(IndexInput in) throws IOException { } } + /** + * Number of bytes between consecutive merge abort checks during {@link + * #checksumEntireFile(IndexInput, MergePolicy.OneMerge)}. Files smaller than this are checksummed + * in one shot without checking for abort. + */ + private static final long ABORT_CHECK_INTERVAL = 1024 * 1024; + /** * Clones the provided input, reads all bytes from the file, and calls {@link #checkFooter} * @@ -604,19 +612,48 @@ private static void validateFooter(IndexInput in) throws IOException { * extract the checksum value, call {@link #retrieveChecksum}. */ public static long checksumEntireFile(IndexInput input) throws IOException { + return checksumEntireFile(input, null, Long.MAX_VALUE); + } + + /** + * Like {@link #checksumEntireFile(IndexInput)}, but periodically checks whether the provided + * merge has been aborted. This avoids spending a long time checksumming a large file when the + * merge has already been cancelled. + * + * @param input the index input to checksum + * @param merge the merge to check for abort, or {@code null} to behave like {@link + * #checksumEntireFile(IndexInput)} + * @throws MergePolicy.MergeAbortedException if the merge is aborted during checksumming + */ + public static long checksumEntireFile(IndexInput input, MergePolicy.OneMerge merge) + throws IOException { + return checksumEntireFile(input, merge, ABORT_CHECK_INTERVAL); + } + + static long checksumEntireFile( + IndexInput input, MergePolicy.OneMerge merge, long abortCheckInterval) throws IOException { IndexInput clone = input.clone(); clone.seek(0); ChecksumIndexInput in = new BufferedChecksumIndexInput(clone); assert in.getFilePointer() == 0; - if (in.length() < footerLength()) { + final long len = in.length(); + if (len < footerLength()) { throw new CorruptIndexException( "misplaced codec footer (file truncated?): length=" - + in.length() + + len + " but footerLength==" + footerLength(), input); } - in.seek(in.length() - footerLength()); + final long target = len - footerLength(); + if (merge == null || target <= abortCheckInterval) { + in.seek(target); + } else { + while (in.getFilePointer() < target) { + in.seek(Math.min(in.getFilePointer() + abortCheckInterval, target)); + merge.checkAborted(); + } + } return checkFooter(in); } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/DocValuesConsumer.java b/lucene/core/src/java/org/apache/lucene/codecs/DocValuesConsumer.java index b75cce9b1a5b..fc2b13e29346 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/DocValuesConsumer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/DocValuesConsumer.java @@ -133,7 +133,7 @@ public void merge(MergeState mergeState) throws IOException { for (DocValuesProducer docValuesProducer : mergeState.docValuesProducers) { if (docValuesProducer != null) { mergeState.checkAborted(); - docValuesProducer.checkIntegrity(); + docValuesProducer.checkIntegrity(mergeState.oneMerge); } } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java b/lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java index b8b9f68b52dc..ea9cb78b0ed4 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java @@ -23,6 +23,7 @@ import org.apache.lucene.index.DocValuesSkipper; import org.apache.lucene.index.DocValuesType; import org.apache.lucene.index.FieldInfo; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SortedDocValues; import org.apache.lucene.index.SortedNumericDocValues; @@ -86,11 +87,12 @@ protected DocValuesProducer() {} * Checks consistency of this producer * *

Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value - * against large data files. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * - * @lucene.internal + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior */ - public abstract void checkIntegrity() throws IOException; + public abstract void checkIntegrity(MergePolicy.OneMerge merge) throws IOException; /** * Returns an instance optimized for merging. This instance may only be consumed in the thread diff --git a/lucene/core/src/java/org/apache/lucene/codecs/FieldsConsumer.java b/lucene/core/src/java/org/apache/lucene/codecs/FieldsConsumer.java index 537410f85698..12878946e32f 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/FieldsConsumer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/FieldsConsumer.java @@ -81,7 +81,7 @@ public void merge(MergeState mergeState, NormsProducer norms) throws IOException final int maxDoc = mergeState.maxDocs[readerIndex]; if (f != null) { mergeState.checkAborted(); - f.checkIntegrity(); + f.checkIntegrity(mergeState.oneMerge); slices.add(new ReaderSlice(docBase, maxDoc, readerIndex)); fields.add(f); } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java b/lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java index cd3e9e0f10d9..334a8a5dfff4 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java @@ -19,6 +19,7 @@ import java.io.Closeable; import java.io.IOException; import org.apache.lucene.index.Fields; +import org.apache.lucene.index.MergePolicy; /** * Abstract API that produces terms, doc, freq, prox, offset and payloads postings. @@ -36,11 +37,12 @@ protected FieldsProducer() {} * Checks consistency of this reader. * *

Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value - * against large data files. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * - * @lucene.internal + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior */ - public abstract void checkIntegrity() throws IOException; + public abstract void checkIntegrity(MergePolicy.OneMerge merge) throws IOException; /** * Returns an instance optimized for merging. This instance may only be consumed in the thread diff --git a/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsFormat.java b/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsFormat.java index 636a869e7ba3..e29de34ef53c 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsFormat.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsFormat.java @@ -23,6 +23,7 @@ import org.apache.lucene.index.ByteVectorValues; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FloatVectorValues; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; import org.apache.lucene.search.AcceptDocs; @@ -126,7 +127,7 @@ public KnnVectorsWriter fieldsWriter(SegmentWriteState state) { public KnnVectorsReader fieldsReader(SegmentReadState state) { return new KnnVectorsReader() { @Override - public void checkIntegrity() {} + public void checkIntegrity(MergePolicy.OneMerge merge) {} @Override public FloatVectorValues getFloatVectorValues(String field) { diff --git a/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsReader.java index 3eab9264895d..774548749349 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsReader.java @@ -25,6 +25,7 @@ import org.apache.lucene.index.ByteVectorValues; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FloatVectorValues; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.search.AcceptDocs; import org.apache.lucene.search.KnnCollector; import org.apache.lucene.search.ScoreDoc; @@ -43,11 +44,12 @@ protected KnnVectorsReader() {} * Checks consistency of this reader. * *

Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value - * against large data files. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * - * @lucene.internal + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior */ - public abstract void checkIntegrity() throws IOException; + public abstract void checkIntegrity(MergePolicy.OneMerge merge) throws IOException; /** * If this reader wraps another for {@code field}, return the underlying reader, else return diff --git a/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsWriter.java index d1e2b2ee1c40..5a4413685fff 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsWriter.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsWriter.java @@ -114,7 +114,7 @@ public final void merge(MergeState mergeState) throws IOException { assert reader != null || mergeState.fieldInfos[i].hasVectorValues() == false; if (reader != null) { mergeState.checkAborted(); - reader.checkIntegrity(); + reader.checkIntegrity(mergeState.oneMerge); } } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/NormsConsumer.java b/lucene/core/src/java/org/apache/lucene/codecs/NormsConsumer.java index fedd9584db31..17ad28782839 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/NormsConsumer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/NormsConsumer.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.lucene.index.DocIDMerger; import org.apache.lucene.index.FieldInfo; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.MergeState; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SegmentWriteState; @@ -67,7 +68,7 @@ public void merge(MergeState mergeState) throws IOException { for (NormsProducer normsProducer : mergeState.normsProducers) { if (normsProducer != null) { mergeState.checkAborted(); - normsProducer.checkIntegrity(); + normsProducer.checkIntegrity(mergeState.oneMerge); } } for (FieldInfo mergeFieldInfo : mergeState.mergeFieldInfos) { @@ -176,7 +177,7 @@ public long longValue() throws IOException { } @Override - public void checkIntegrity() {} + public void checkIntegrity(MergePolicy.OneMerge merge) {} @Override public void close() {} diff --git a/lucene/core/src/java/org/apache/lucene/codecs/NormsProducer.java b/lucene/core/src/java/org/apache/lucene/codecs/NormsProducer.java index 064e8418d595..700a4213548c 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/NormsProducer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/NormsProducer.java @@ -19,6 +19,7 @@ import java.io.Closeable; import java.io.IOException; import org.apache.lucene.index.FieldInfo; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; /** @@ -42,11 +43,12 @@ protected NormsProducer() {} * Checks consistency of this producer * *

Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value - * against large data files. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * - * @lucene.internal + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior */ - public abstract void checkIntegrity() throws IOException; + public abstract void checkIntegrity(MergePolicy.OneMerge merge) throws IOException; /** * Returns an instance optimized for merging. This instance may only be used from the thread that diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointsFormat.java b/lucene/core/src/java/org/apache/lucene/codecs/PointsFormat.java index a6dc05daba32..5770df6883f9 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/PointsFormat.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/PointsFormat.java @@ -17,6 +17,7 @@ package org.apache.lucene.codecs; import java.io.IOException; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PointValues; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -58,7 +59,7 @@ public PointsReader fieldsReader(SegmentReadState state) { public void close() {} @Override - public void checkIntegrity() {} + public void checkIntegrity(MergePolicy.OneMerge merge) {} @Override public PointValues getValues(String field) { diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java index 52c547f5ed3b..aa20f19af162 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java @@ -19,6 +19,7 @@ import java.io.Closeable; import java.io.IOException; import org.apache.lucene.index.FieldInfo; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PointValues; /** @@ -35,11 +36,12 @@ protected PointsReader() {} * Checks consistency of this reader. * *

Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value - * against large data files. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * - * @lucene.internal + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior */ - public abstract void checkIntegrity() throws IOException; + public abstract void checkIntegrity(MergePolicy.OneMerge merge) throws IOException; /** * Return {@link PointValues} for the given {@code field}. The behavior is undefined if the given diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java index 4b4f2a017738..f8a2cffea19c 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java @@ -19,6 +19,7 @@ import java.io.Closeable; import java.io.IOException; import org.apache.lucene.index.FieldInfo; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.MergeState; import org.apache.lucene.index.PointValues; @@ -208,7 +209,7 @@ public int getDocCount() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { throw new UnsupportedOperationException(); } }); @@ -223,7 +224,7 @@ public void merge(MergeState mergeState) throws IOException { for (PointsReader reader : mergeState.pointsReaders) { if (reader != null) { mergeState.checkAborted(); - reader.checkIntegrity(); + reader.checkIntegrity(mergeState.oneMerge); } } // merge field at a time diff --git a/lucene/core/src/java/org/apache/lucene/codecs/PostingsReaderBase.java b/lucene/core/src/java/org/apache/lucene/codecs/PostingsReaderBase.java index c579ed9b0436..d49105578cae 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/PostingsReaderBase.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/PostingsReaderBase.java @@ -20,6 +20,7 @@ import java.io.IOException; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.ImpactsEnum; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.store.DataInput; @@ -78,11 +79,12 @@ public abstract ImpactsEnum impacts(FieldInfo fieldInfo, BlockTermState state, i * Checks consistency of this reader. * *

Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value - * against large data files. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * - * @lucene.internal + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior */ - public abstract void checkIntegrity() throws IOException; + public abstract void checkIntegrity(MergePolicy.OneMerge merge) throws IOException; @Override public abstract void close() throws IOException; diff --git a/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsReader.java index 0e4d33c5abe2..1c0ebe357fe6 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsReader.java @@ -18,6 +18,7 @@ import java.io.Closeable; import java.io.IOException; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.StoredFieldVisitor; import org.apache.lucene.index.StoredFields; @@ -41,11 +42,12 @@ protected StoredFieldsReader() {} * Checks consistency of this reader. * *

Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value - * against large data files. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * - * @lucene.internal + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior */ - public abstract void checkIntegrity() throws IOException; + public abstract void checkIntegrity(MergePolicy.OneMerge merge) throws IOException; /** * Returns an instance optimized for merging. This instance may not be cloned. diff --git a/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsWriter.java index f5eb9e4c1137..8a5210930e4a 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsWriter.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsWriter.java @@ -131,7 +131,7 @@ public int merge(MergeState mergeState) throws IOException { for (int i = 0; i < mergeState.storedFieldsReaders.length; i++) { StoredFieldsReader storedFieldsReader = mergeState.storedFieldsReaders[i]; mergeState.checkAborted(); - storedFieldsReader.checkIntegrity(); + storedFieldsReader.checkIntegrity(mergeState.oneMerge); subs.add( new StoredFieldsMergeSub( new MergeVisitor(mergeState, i), diff --git a/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java index 0ad39dd1abe7..dc30da162998 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java @@ -18,6 +18,7 @@ import java.io.Closeable; import java.io.IOException; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.TermVectors; /** @@ -34,11 +35,12 @@ protected TermVectorsReader() {} * Checks consistency of this reader. * *

Note that this may be costly in terms of I/O, e.g. may involve computing a checksum value - * against large data files. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * - * @lucene.internal + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior */ - public abstract void checkIntegrity() throws IOException; + public abstract void checkIntegrity(MergePolicy.OneMerge merge) throws IOException; /** Create a clone that one caller at a time may use to read term vectors. */ @Override diff --git a/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsWriter.java index 8c9b11dd352d..daa935c9b49d 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsWriter.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsWriter.java @@ -201,7 +201,7 @@ public int merge(MergeState mergeState) throws IOException { TermVectorsReader reader = mergeState.termVectorsReaders[i]; if (reader != null) { mergeState.checkAborted(); - reader.checkIntegrity(); + reader.checkIntegrity(mergeState.oneMerge); } subs.add(new TermVectorsMergeSub(mergeState.docMaps[i], reader, mergeState.maxDocs[i])); } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene103/blocktree/Lucene103BlockTreeTermsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene103/blocktree/Lucene103BlockTreeTermsReader.java index 4e99b9dba127..fc73ffc42080 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene103/blocktree/Lucene103BlockTreeTermsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene103/blocktree/Lucene103BlockTreeTermsReader.java @@ -29,6 +29,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.Terms; import org.apache.lucene.internal.hppc.IntCursor; @@ -296,15 +297,15 @@ public int size() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // terms index - CodecUtil.checksumEntireFile(indexIn); + CodecUtil.checksumEntireFile(indexIn, merge); // term dictionary - CodecUtil.checksumEntireFile(termsIn); + CodecUtil.checksumEntireFile(termsIn, merge); // postings - postingsReader.checkIntegrity(); + postingsReader.checkIntegrity(merge); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104PostingsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104PostingsReader.java index eafe644c9b23..aabe54ae11b8 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104PostingsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104PostingsReader.java @@ -38,6 +38,7 @@ import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.internal.vectorization.PostingDecodingUtil; @@ -1469,15 +1470,15 @@ static FreqAndNormBuffer readImpacts(ByteArrayDataInput in, FreqAndNormBuffer re } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { if (docIn != null) { - CodecUtil.checksumEntireFile(docIn); + CodecUtil.checksumEntireFile(docIn, merge); } if (posIn != null) { - CodecUtil.checksumEntireFile(posIn); + CodecUtil.checksumEntireFile(posIn, merge); } if (payIn != null) { - CodecUtil.checksumEntireFile(payIn); + CodecUtil.checksumEntireFile(payIn, merge); } } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104ScalarQuantizedVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104ScalarQuantizedVectorsReader.java index 041488a46ffe..946b1745fc6a 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104ScalarQuantizedVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene104/Lucene104ScalarQuantizedVectorsReader.java @@ -40,6 +40,7 @@ import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.KnnVectorValues; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; import org.apache.lucene.index.VectorEncoding; @@ -221,9 +222,9 @@ public RandomVectorScorer getRandomVectorScorer(String field, byte[] target) thr } @Override - public void checkIntegrity() throws IOException { - rawVectorsReader.checkIntegrity(); - CodecUtil.checksumEntireFile(quantizedVectorData); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + rawVectorsReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(quantizedVectorData, merge); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesProducer.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesProducer.java index 61f4f2942428..591f6c61d273 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesProducer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90DocValuesProducer.java @@ -34,6 +34,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; @@ -2280,10 +2281,10 @@ public void intoBitSet(int upTo, FixedBitSet bitSet, int offset) throws IOExcept } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(data); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(data, merge); if (skipIndexData != null) { - CodecUtil.checksumEntireFile(skipIndexData); + CodecUtil.checksumEntireFile(skipIndexData, merge); } } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90NormsProducer.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90NormsProducer.java index efbea3e22c7d..915d19d2310e 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90NormsProducer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90NormsProducer.java @@ -27,6 +27,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.internal.hppc.IntObjectHashMap; @@ -500,8 +501,8 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(data); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(data, merge); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90PointsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90PointsReader.java index e896cf7e0af2..d793477e28e5 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90PointsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90PointsReader.java @@ -22,6 +22,7 @@ import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PointValues; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.internal.hppc.IntObjectHashMap; @@ -143,9 +144,9 @@ public PointValues getValues(String fieldName) { } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(indexIn); - CodecUtil.checksumEntireFile(dataIn); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(indexIn, merge); + CodecUtil.checksumEntireFile(dataIn, merge); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90PointsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90PointsWriter.java index eaea9d45bf57..96e6c35a9e51 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90PointsWriter.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90PointsWriter.java @@ -205,7 +205,7 @@ public void merge(MergeState mergeState) throws IOException { for (PointsReader reader : mergeState.pointsReaders) { if (reader != null) { mergeState.checkAborted(); - reader.checkIntegrity(); + reader.checkIntegrity(mergeState.oneMerge); } } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/FieldsIndex.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/FieldsIndex.java index a0f59575b27b..95911e14f428 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/FieldsIndex.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/FieldsIndex.java @@ -18,6 +18,7 @@ import java.io.Closeable; import java.io.IOException; +import org.apache.lucene.index.MergePolicy; abstract class FieldsIndex implements Cloneable, Closeable { @@ -35,8 +36,8 @@ final long getStartPointer(int docID) { return getBlockStartPointer(getBlockID(docID)); } - /** Check the integrity of the index. */ - abstract void checkIntegrity() throws IOException; + /** Check the integrity of the index, with periodic merge abort checks. */ + abstract void checkIntegrity(MergePolicy.OneMerge merge) throws IOException; @Override public abstract FieldsIndex clone(); diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/FieldsIndexReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/FieldsIndexReader.java index d823626c9da8..608dd03fd4ac 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/FieldsIndexReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/FieldsIndexReader.java @@ -24,6 +24,7 @@ import java.util.Objects; import org.apache.lucene.codecs.CodecUtil; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FileTypeHint; import org.apache.lucene.store.IOContext; @@ -154,7 +155,7 @@ public long getMaxPointer() { } @Override - void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(indexInput); + void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(indexInput, merge); } } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingStoredFieldsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingStoredFieldsReader.java index 9d142ba5ef28..868190a4b103 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingStoredFieldsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingStoredFieldsReader.java @@ -50,6 +50,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.index.StoredFieldDataInput; import org.apache.lucene.index.StoredFieldVisitor; @@ -755,9 +756,9 @@ int getNumDocs() { } @Override - public void checkIntegrity() throws IOException { - indexReader.checkIntegrity(); - CodecUtil.checksumEntireFile(fieldsStream); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + indexReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(fieldsStream, merge); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingStoredFieldsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingStoredFieldsWriter.java index 4d2b2f25a14e..d3364f5ea53f 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingStoredFieldsWriter.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingStoredFieldsWriter.java @@ -602,7 +602,7 @@ public int merge(MergeState mergeState) throws IOException { for (int i = 0; i < mergeState.storedFieldsReaders.length; i++) { final StoredFieldsReader reader = mergeState.storedFieldsReaders[i]; mergeState.checkAborted(); - reader.checkIntegrity(); + reader.checkIntegrity(mergeState.oneMerge); MergeStrategy mergeStrategy = getMergeStrategy(mergeState, matchingReaders, i); if (mergeStrategy == MergeStrategy.VISITOR) { visitors[i] = new MergeVisitor(mergeState, i); diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingTermVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingTermVectorsReader.java index 017ab9083e6f..05774f803b34 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingTermVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingTermVectorsReader.java @@ -46,6 +46,7 @@ import org.apache.lucene.index.Fields; import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.index.SlowImpactsEnum; @@ -1349,9 +1350,9 @@ private static int sum(int[] arr) { } @Override - public void checkIntegrity() throws IOException { - indexReader.checkIntegrity(); - CodecUtil.checksumEntireFile(vectorsStream); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + indexReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(vectorsStream, merge); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingTermVectorsWriter.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingTermVectorsWriter.java index 3fe9f2a47ef8..c95164b0b868 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingTermVectorsWriter.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/compressing/Lucene90CompressingTermVectorsWriter.java @@ -899,7 +899,7 @@ public int merge(MergeState mergeState) throws IOException { final TermVectorsReader reader = mergeState.termVectorsReaders[i]; if (reader != null) { mergeState.checkAborted(); - reader.checkIntegrity(); + reader.checkIntegrity(mergeState.oneMerge); } final boolean bulkMerge = canPerformBulkMerge(mergeState, matchingReaders, i); subs.add(new CompressingTermVectorsSub(mergeState, bulkMerge, i)); diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99FlatVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99FlatVectorsReader.java index 68edb71c14df..f2c0b7fa47c2 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99FlatVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99FlatVectorsReader.java @@ -36,6 +36,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.VectorEncoding; import org.apache.lucene.index.VectorSimilarityFunction; @@ -190,8 +191,8 @@ public Map getOffHeapByteSize(FieldInfo fieldInfo) { } @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(vectorData); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(vectorData, merge); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99HnswVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99HnswVectorsReader.java index 20a4300d8248..7078b365b45c 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99HnswVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99HnswVectorsReader.java @@ -34,6 +34,7 @@ import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; import org.apache.lucene.index.VectorEncoding; @@ -262,9 +263,9 @@ public long ramBytesUsed() { } @Override - public void checkIntegrity() throws IOException { - flatVectorsReader.checkIntegrity(); - CodecUtil.checksumEntireFile(vectorIndex); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + flatVectorsReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(vectorIndex, merge); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldDocValuesFormat.java b/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldDocValuesFormat.java index 9b00de950442..9954c40de7db 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldDocValuesFormat.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldDocValuesFormat.java @@ -31,6 +31,7 @@ import org.apache.lucene.index.DocValuesSkipper; import org.apache.lucene.index.DocValuesType; import org.apache.lucene.index.FieldInfo; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.MergeState; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SegmentReadState; @@ -353,9 +354,9 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (DocValuesProducer format : formats.values()) { - format.checkIntegrity(); + format.checkIntegrity(merge); } } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldKnnVectorsFormat.java b/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldKnnVectorsFormat.java index a05ce59a77dc..1e7f89316708 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldKnnVectorsFormat.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldKnnVectorsFormat.java @@ -33,6 +33,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.MergeState; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -267,9 +268,9 @@ public KnnVectorsReader unwrapReaderForField(String field) { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (ObjectCursor cursor : fields.values()) { - cursor.value.checkIntegrity(); + cursor.value.checkIntegrity(merge); } } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldMergeState.java b/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldMergeState.java index 85df2414aa38..47a15c9cd0eb 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldMergeState.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldMergeState.java @@ -28,6 +28,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.MergeState; import org.apache.lucene.index.Terms; @@ -265,8 +266,8 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } } } diff --git a/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java b/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java index ff5c2c9646f1..7bff4d019c9d 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java @@ -39,6 +39,7 @@ import org.apache.lucene.index.Fields; import org.apache.lucene.index.FilterLeafReader.FilterFields; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.MergeState; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -348,9 +349,9 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (FieldsProducer producer : formats.values()) { - producer.checkIntegrity(); + producer.checkIntegrity(merge); } } diff --git a/lucene/core/src/java/org/apache/lucene/index/CodecReader.java b/lucene/core/src/java/org/apache/lucene/index/CodecReader.java index 2f50a04b4b6f..9e579a23a338 100644 --- a/lucene/core/src/java/org/apache/lucene/index/CodecReader.java +++ b/lucene/core/src/java/org/apache/lucene/index/CodecReader.java @@ -297,37 +297,37 @@ public void checkIntegrity() throws IOException { // terms/postings if (getPostingsReader() != null) { - getPostingsReader().checkIntegrity(); + getPostingsReader().checkIntegrity(null); } // norms if (getNormsReader() != null) { - getNormsReader().checkIntegrity(); + getNormsReader().checkIntegrity(null); } // docvalues if (getDocValuesReader() != null) { - getDocValuesReader().checkIntegrity(); + getDocValuesReader().checkIntegrity(null); } // stored fields if (getFieldsReader() != null) { - getFieldsReader().checkIntegrity(); + getFieldsReader().checkIntegrity(null); } // term vectors if (getTermVectorsReader() != null) { - getTermVectorsReader().checkIntegrity(); + getTermVectorsReader().checkIntegrity(null); } // points if (getPointsReader() != null) { - getPointsReader().checkIntegrity(); + getPointsReader().checkIntegrity(null); } // vectors if (getVectorReader() != null) { - getVectorReader().checkIntegrity(); + getVectorReader().checkIntegrity(null); } } } diff --git a/lucene/core/src/java/org/apache/lucene/index/EmptyDocValuesProducer.java b/lucene/core/src/java/org/apache/lucene/index/EmptyDocValuesProducer.java index 8e6df43c43a3..7f30678d4353 100644 --- a/lucene/core/src/java/org/apache/lucene/index/EmptyDocValuesProducer.java +++ b/lucene/core/src/java/org/apache/lucene/index/EmptyDocValuesProducer.java @@ -57,7 +57,7 @@ public DocValuesSkipper getSkipper(FieldInfo field) { } @Override - public void checkIntegrity() { + public void checkIntegrity(MergePolicy.OneMerge merge) { throw new UnsupportedOperationException(); } diff --git a/lucene/core/src/java/org/apache/lucene/index/NormValuesWriter.java b/lucene/core/src/java/org/apache/lucene/index/NormValuesWriter.java index dfd98ab291e2..26b5351bedd8 100644 --- a/lucene/core/src/java/org/apache/lucene/index/NormValuesWriter.java +++ b/lucene/core/src/java/org/apache/lucene/index/NormValuesWriter.java @@ -97,7 +97,7 @@ public NumericDocValues getNorms(FieldInfo fieldInfo2) { } @Override - public void checkIntegrity() {} + public void checkIntegrity(MergePolicy.OneMerge merge) {} @Override public void close() {} diff --git a/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java b/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java index 4bff39999cca..7bfde5c16ca1 100644 --- a/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java +++ b/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java @@ -328,7 +328,7 @@ public int getDocCount() { } @Override - public void checkIntegrity() { + public void checkIntegrity(MergePolicy.OneMerge merge) { throw new UnsupportedOperationException(); } diff --git a/lucene/core/src/java/org/apache/lucene/index/SegmentDocValuesProducer.java b/lucene/core/src/java/org/apache/lucene/index/SegmentDocValuesProducer.java index 0f4df818ddcb..912f833eec71 100644 --- a/lucene/core/src/java/org/apache/lucene/index/SegmentDocValuesProducer.java +++ b/lucene/core/src/java/org/apache/lucene/index/SegmentDocValuesProducer.java @@ -131,9 +131,9 @@ public DocValuesSkipper getSkipper(FieldInfo field) throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (DocValuesProducer producer : dvProducers) { - producer.checkIntegrity(); + producer.checkIntegrity(merge); } } diff --git a/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java b/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java index b3493b93afc6..555f459b6990 100644 --- a/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java +++ b/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java @@ -153,7 +153,7 @@ public PointValues getValues(String field) { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // We already checkIntegrity the entire reader up front } @@ -189,7 +189,7 @@ public void search( } @Override - public void checkIntegrity() { + public void checkIntegrity(MergePolicy.OneMerge merge) { // We already checkIntegrity the entire reader up front } @@ -226,7 +226,7 @@ public NumericDocValues getNorms(FieldInfo field) throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // We already checkIntegrity the entire reader up front } @@ -269,7 +269,7 @@ public DocValuesSkipper getSkipper(FieldInfo field) throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // We already checkIntegrity the entire reader up front } @@ -302,7 +302,7 @@ public StoredFieldsReader clone() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // We already checkIntegrity the entire reader up front } @@ -335,7 +335,7 @@ public TermVectorsReader clone() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // We already checkIntegrity the entire reader up front } @@ -369,7 +369,7 @@ public int size() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // We already checkIntegrity the entire reader up front } diff --git a/lucene/core/src/java/org/apache/lucene/index/SlowCompositeCodecReaderWrapper.java b/lucene/core/src/java/org/apache/lucene/index/SlowCompositeCodecReaderWrapper.java index ee639578d512..a7d8bf2abd78 100644 --- a/lucene/core/src/java/org/apache/lucene/index/SlowCompositeCodecReaderWrapper.java +++ b/lucene/core/src/java/org/apache/lucene/index/SlowCompositeCodecReaderWrapper.java @@ -145,10 +145,10 @@ public StoredFieldsReader clone() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (StoredFieldsReader reader : readers) { if (reader != null) { - reader.checkIntegrity(); + reader.checkIntegrity(merge); } } } @@ -236,10 +236,10 @@ public TermVectorsReader clone() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (TermVectorsReader reader : readers) { if (reader != null) { - reader.checkIntegrity(); + reader.checkIntegrity(merge); } } } @@ -293,10 +293,10 @@ public NumericDocValues getNorms(FieldInfo field) throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (NormsProducer producer : producers) { if (producer != null) { - producer.checkIntegrity(); + producer.checkIntegrity(merge); } } } @@ -400,10 +400,10 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (DocValuesProducer producer : producers) { if (producer != null) { - producer.checkIntegrity(); + producer.checkIntegrity(merge); } } } @@ -528,10 +528,10 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (FieldsProducer producer : producers) { if (producer != null) { - producer.checkIntegrity(); + producer.checkIntegrity(merge); } } } @@ -585,10 +585,10 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (PointsReader reader : readers) { if (reader != null) { - reader.checkIntegrity(); + reader.checkIntegrity(merge); } } } @@ -825,10 +825,10 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (KnnVectorsReader reader : readers) { if (reader != null) { - reader.checkIntegrity(); + reader.checkIntegrity(merge); } } } diff --git a/lucene/core/src/java/org/apache/lucene/index/SortingCodecReader.java b/lucene/core/src/java/org/apache/lucene/index/SortingCodecReader.java index 05e61f122577..4cc052cea9f8 100644 --- a/lucene/core/src/java/org/apache/lucene/index/SortingCodecReader.java +++ b/lucene/core/src/java/org/apache/lucene/index/SortingCodecReader.java @@ -458,8 +458,8 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { - postingsReader.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + postingsReader.checkIntegrity(merge); } @Override @@ -510,8 +510,8 @@ public StoredFieldsReader clone() { } @Override - public void checkIntegrity() throws IOException { - delegate.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegate.checkIntegrity(merge); } @Override @@ -539,8 +539,8 @@ public PointsReader getPointsReader() { } return new PointsReader() { @Override - public void checkIntegrity() throws IOException { - delegate.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegate.checkIntegrity(merge); } @Override @@ -567,8 +567,8 @@ public KnnVectorsReader getVectorReader() { } return new KnnVectorsReader() { @Override - public void checkIntegrity() throws IOException { - delegate.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegate.checkIntegrity(merge); } @Override @@ -619,8 +619,8 @@ public NumericDocValues getNorms(FieldInfo field) throws IOException { } @Override - public void checkIntegrity() throws IOException { - delegate.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegate.checkIntegrity(merge); } @Override @@ -701,8 +701,8 @@ public SortedSetDocValues getSortedSet(FieldInfo field) throws IOException { } @Override - public void checkIntegrity() throws IOException { - delegate.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegate.checkIntegrity(merge); } @Override @@ -752,8 +752,8 @@ public Fields get(int doc) throws IOException { } @Override - public void checkIntegrity() throws IOException { - delegate.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegate.checkIntegrity(merge); } @Override diff --git a/lucene/core/src/java/org/apache/lucene/index/SortingTermVectorsConsumer.java b/lucene/core/src/java/org/apache/lucene/index/SortingTermVectorsConsumer.java index d5d4aceae851..c520c46083b3 100644 --- a/lucene/core/src/java/org/apache/lucene/index/SortingTermVectorsConsumer.java +++ b/lucene/core/src/java/org/apache/lucene/index/SortingTermVectorsConsumer.java @@ -70,7 +70,7 @@ void flush( .termVectorsFormat() .vectorsWriter(state.directory, state.segmentInfo, state.context); try { - reader.checkIntegrity(); + reader.checkIntegrity(null); for (int docID = 0; docID < state.segmentInfo.maxDoc(); docID++) { Fields vectors = reader.get(sortMap == null ? docID : sortMap.newToOld(docID)); writeTermVectors(writer, vectors, state.fieldInfos); diff --git a/lucene/core/src/test/org/apache/lucene/codecs/TestCodecUtil.java b/lucene/core/src/test/org/apache/lucene/codecs/TestCodecUtil.java index ea47019de6ca..23c1b2887687 100644 --- a/lucene/core/src/test/org/apache/lucene/codecs/TestCodecUtil.java +++ b/lucene/core/src/test/org/apache/lucene/codecs/TestCodecUtil.java @@ -18,8 +18,12 @@ package org.apache.lucene.codecs; import java.io.IOException; +import java.util.List; import java.util.concurrent.atomic.AtomicLong; import org.apache.lucene.index.CorruptIndexException; +import org.apache.lucene.index.MergePolicy; +import org.apache.lucene.index.SegmentCommitInfo; +import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.store.BufferedChecksumIndexInput; import org.apache.lucene.store.ByteBuffersDataOutput; import org.apache.lucene.store.ByteBuffersIndexInput; @@ -31,6 +35,7 @@ import org.apache.lucene.store.IndexOutput; import org.apache.lucene.tests.util.LuceneTestCase; import org.apache.lucene.util.StringHelper; +import org.apache.lucene.util.Version; /** tests for codecutil methods */ public class TestCodecUtil extends LuceneTestCase { @@ -413,4 +418,89 @@ public void testRetrieveChecksum() throws IOException { dir.close(); } + + public void testChecksumEntireFileWithMergeAbort() throws Exception { + Directory dir = newDirectory(); + try (IndexOutput output = dir.createOutput("large", IOContext.DEFAULT)) { + CodecUtil.writeHeader(output, "FooBar", 5); + byte[] data = new byte[128]; + for (int i = 0; i < 16; i++) { + output.writeBytes(data, data.length); + } + CodecUtil.writeFooter(output); + } + + SegmentInfo si = + new SegmentInfo( + dir, + Version.LATEST, + Version.LATEST, + "test", + 0, + false, + false, + null, + java.util.Map.of(), + new byte[StringHelper.ID_LENGTH], + java.util.Map.of(), + null); + SegmentCommitInfo sci = new SegmentCommitInfo(si, 0, 0, -1, -1, -1, StringHelper.randomId()); + MergePolicy.OneMerge merge = new MergePolicy.OneMerge(List.of(sci)); + merge.setAborted(); + + try (IndexInput input = dir.openInput("large", IOContext.DEFAULT)) { + // Use a small abort check interval so the test triggers on a small file + expectThrows( + MergePolicy.MergeAbortedException.class, + () -> CodecUtil.checksumEntireFile(input, merge, 100)); + } + dir.close(); + } + + public void testChecksumEntireFileWithNonAbortedMerge() throws Exception { + Directory dir = newDirectory(); + try (IndexOutput output = dir.createOutput("large", IOContext.DEFAULT)) { + CodecUtil.writeHeader(output, "FooBar", 5); + byte[] data = new byte[128]; + for (int i = 0; i < 16; i++) { + output.writeBytes(data, data.length); + } + CodecUtil.writeFooter(output); + } + + SegmentInfo si = + new SegmentInfo( + dir, + Version.LATEST, + Version.LATEST, + "test", + 0, + false, + false, + null, + java.util.Map.of(), + new byte[StringHelper.ID_LENGTH], + java.util.Map.of(), + null); + SegmentCommitInfo sci = new SegmentCommitInfo(si, 0, 0, -1, -1, -1, StringHelper.randomId()); + MergePolicy.OneMerge merge = new MergePolicy.OneMerge(List.of(sci)); + + try (IndexInput input = dir.openInput("large", IOContext.DEFAULT)) { + CodecUtil.checksumEntireFile(input, merge, 100); + } + dir.close(); + } + + public void testChecksumEntireFileWithNullMerge() throws Exception { + ByteBuffersDataOutput out = new ByteBuffersDataOutput(); + IndexOutput output = new ByteBuffersIndexOutput(out, "temp", "temp"); + CodecUtil.writeHeader(output, "FooBar", 5); + output.writeString("this is the data"); + CodecUtil.writeFooter(output); + output.close(); + + IndexInput input = new ByteBuffersIndexInput(out.toDataInput(), "temp"); + CodecUtil.checksumEntireFile(input, null); + input.close(); + } } diff --git a/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java b/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java index 092f1ba3a233..c178414543b4 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java @@ -898,7 +898,7 @@ public long longValue() throws IOException { } @Override - public void checkIntegrity() throws IOException {} + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException {} }; boolean success = false; try { diff --git a/lucene/core/src/test/org/apache/lucene/index/TestMultiTermsEnum.java b/lucene/core/src/test/org/apache/lucene/index/TestMultiTermsEnum.java index 745526379bb3..f6c8f8f53f5e 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestMultiTermsEnum.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestMultiTermsEnum.java @@ -226,8 +226,8 @@ protected FieldsProducer create(FieldsProducer delegate, FieldInfos newFieldInfo } @Override - public void checkIntegrity() throws IOException { - delegate.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegate.checkIntegrity(merge); } @Override diff --git a/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/faiss/FaissKnnVectorsReader.java b/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/faiss/FaissKnnVectorsReader.java index 1f791299091c..580f3757c22b 100644 --- a/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/faiss/FaissKnnVectorsReader.java +++ b/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/faiss/FaissKnnVectorsReader.java @@ -37,6 +37,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FloatVectorValues; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.search.AcceptDocs; import org.apache.lucene.search.KnnCollector; @@ -149,10 +150,10 @@ private static FieldMeta parseNextField(IndexInput meta, SegmentReadState state) } @Override - public void checkIntegrity() throws IOException { - rawVectorsReader.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + rawVectorsReader.checkIntegrity(merge); // TODO: Evaluate if we need an explicit check for validity of Faiss indexes - CodecUtil.checksumEntireFile(data); + CodecUtil.checksumEntireFile(data, merge); } @Override diff --git a/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionPostingsReader.java b/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionPostingsReader.java index e012f1d441c6..f7c79f932d6b 100644 --- a/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionPostingsReader.java +++ b/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionPostingsReader.java @@ -22,6 +22,7 @@ import org.apache.lucene.codecs.PostingsReaderBase; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.ImpactsEnum; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.store.DataInput; @@ -99,7 +100,7 @@ public ImpactsEnum impacts(FieldInfo fieldInfo, BlockTermState state, int flags) } @Override - public void checkIntegrity() throws IOException {} + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException {} @Override public String toString() { diff --git a/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/VersionBlockTreeTermsReader.java b/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/VersionBlockTreeTermsReader.java index f0978a0582c1..160e2965be30 100644 --- a/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/VersionBlockTreeTermsReader.java +++ b/lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/VersionBlockTreeTermsReader.java @@ -26,6 +26,7 @@ import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.Terms; import org.apache.lucene.store.IndexInput; @@ -234,12 +235,12 @@ public int size() { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // term dictionary - CodecUtil.checksumEntireFile(in); + CodecUtil.checksumEntireFile(in, merge); // postings - postingsReader.checkIntegrity(); + postingsReader.checkIntegrity(merge); } @Override diff --git a/lucene/suggest/src/java/org/apache/lucene/search/suggest/document/CompletionFieldsProducer.java b/lucene/suggest/src/java/org/apache/lucene/search/suggest/document/CompletionFieldsProducer.java index a7c29288b51c..635178b5f5a6 100644 --- a/lucene/suggest/src/java/org/apache/lucene/search/suggest/document/CompletionFieldsProducer.java +++ b/lucene/suggest/src/java/org/apache/lucene/search/suggest/document/CompletionFieldsProducer.java @@ -34,6 +34,7 @@ import org.apache.lucene.codecs.PostingsFormat; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.IndexFileNames; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.Terms; import org.apache.lucene.store.ChecksumIndexInput; @@ -130,8 +131,8 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { - delegateFieldsProducer.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegateFieldsProducer.checkIntegrity(merge); // TODO: checkIntegrity should checksum the dictionary and index } diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingDocValuesFormat.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingDocValuesFormat.java index 046fd8503046..de0c536d888e 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingDocValuesFormat.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingDocValuesFormat.java @@ -28,6 +28,7 @@ import org.apache.lucene.index.DocValuesType; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -308,8 +309,8 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } @Override diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingKnnVectorsFormat.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingKnnVectorsFormat.java index dc06aa4faff5..f1f4f1044ad6 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingKnnVectorsFormat.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingKnnVectorsFormat.java @@ -29,6 +29,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FloatVectorValues; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.MergeState; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -126,8 +127,8 @@ private AssertingKnnVectorsReader(KnnVectorsReader delegate, FieldInfos fis) { } @Override - public void checkIntegrity() throws IOException { - delegate.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegate.checkIntegrity(merge); } @Override diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingNormsFormat.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingNormsFormat.java index 2dea74846c8b..1b058d464692 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingNormsFormat.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingNormsFormat.java @@ -23,6 +23,7 @@ import org.apache.lucene.codecs.NormsFormat; import org.apache.lucene.codecs.NormsProducer; import org.apache.lucene.index.FieldInfo; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -113,8 +114,8 @@ public void close() throws IOException { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } @Override diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingPointsFormat.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingPointsFormat.java index d8354a55789c..2c7f2edb3870 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingPointsFormat.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingPointsFormat.java @@ -22,6 +22,7 @@ import org.apache.lucene.codecs.PointsWriter; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.MergeState; import org.apache.lucene.index.PointValues; import org.apache.lucene.index.SegmentReadState; @@ -97,8 +98,8 @@ public PointValues getValues(String field) { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } @Override diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingPostingsFormat.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingPostingsFormat.java index 8b963c106258..2b9eadd2368a 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingPostingsFormat.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingPostingsFormat.java @@ -26,6 +26,7 @@ import org.apache.lucene.index.Fields; import org.apache.lucene.index.IndexOptions; import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -88,8 +89,8 @@ public int size() { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } @Override diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingStoredFieldsFormat.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingStoredFieldsFormat.java index 2ea955c3c01a..c4e68af22da7 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingStoredFieldsFormat.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingStoredFieldsFormat.java @@ -23,6 +23,7 @@ import org.apache.lucene.codecs.StoredFieldsWriter; import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.index.StoredFieldDataInput; import org.apache.lucene.index.StoredFieldVisitor; @@ -84,8 +85,8 @@ public StoredFieldsReader clone() { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } @Override diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingTermVectorsFormat.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingTermVectorsFormat.java index 209ef5150b6b..256fb80560f6 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingTermVectorsFormat.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingTermVectorsFormat.java @@ -25,6 +25,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.Fields; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.store.Directory; import org.apache.lucene.store.IOContext; @@ -78,8 +79,8 @@ public TermVectorsReader clone() { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } @Override diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/cranky/CrankyPointsFormat.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/cranky/CrankyPointsFormat.java index 17d2bbfc1db0..17a500601dd0 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/cranky/CrankyPointsFormat.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/cranky/CrankyPointsFormat.java @@ -22,6 +22,7 @@ import org.apache.lucene.codecs.PointsReader; import org.apache.lucene.codecs.PointsWriter; import org.apache.lucene.index.FieldInfo; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.MergeState; import org.apache.lucene.index.PointValues; import org.apache.lucene.index.SegmentReadState; @@ -104,11 +105,11 @@ public CrankyPointsReader(PointsReader delegate, Random random) { } @Override - public void checkIntegrity() throws IOException { + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { if (random.nextInt(100) == 0) { throw new IOException("Fake IOException"); } - delegate.checkIntegrity(); + delegate.checkIntegrity(merge); if (random.nextInt(100) == 0) { throw new IOException("Fake IOException"); } diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/ramonly/RAMOnlyPostingsFormat.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/ramonly/RAMOnlyPostingsFormat.java index c26a65f9b76b..7c76d16fdf45 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/ramonly/RAMOnlyPostingsFormat.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/ramonly/RAMOnlyPostingsFormat.java @@ -38,6 +38,7 @@ import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexFileNames; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentReadState; import org.apache.lucene.index.SegmentWriteState; @@ -87,7 +88,7 @@ public Iterator iterator() { public void close() {} @Override - public void checkIntegrity() throws IOException {} + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException {} } static class RAMField extends Terms { diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/index/BaseIndexFileFormatTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/tests/index/BaseIndexFileFormatTestCase.java index 33121f212ecc..d0448b5dcad8 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/index/BaseIndexFileFormatTestCase.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/index/BaseIndexFileFormatTestCase.java @@ -397,7 +397,7 @@ public NumericDocValues getNorms(FieldInfo field) throws IOException { } @Override - public void checkIntegrity() throws IOException {} + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException {} }; try (FieldsConsumer consumer = codec.postingsFormat().fieldsConsumer(writeState)) { final Fields fields = @@ -542,7 +542,7 @@ public long longValue() { } @Override - public void checkIntegrity() {} + public void checkIntegrity(MergePolicy.OneMerge merge) {} @Override public void close() {} diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/index/MismatchedCodecReader.java b/lucene/test-framework/src/java/org/apache/lucene/tests/index/MismatchedCodecReader.java index 8c856aafcba2..12709de0a807 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/index/MismatchedCodecReader.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/index/MismatchedCodecReader.java @@ -28,6 +28,7 @@ import org.apache.lucene.index.FieldInfo; import org.apache.lucene.index.FieldInfos; import org.apache.lucene.index.FilterCodecReader; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.SortedDocValues; import org.apache.lucene.index.SortedNumericDocValues; @@ -93,8 +94,8 @@ public StoredFieldsReader clone() { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } @Override @@ -166,8 +167,8 @@ public DocValuesSkipper getSkipper(FieldInfo field) throws IOException { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } } @@ -209,8 +210,8 @@ public NumericDocValues getNorms(FieldInfo field) throws IOException { } @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); } } } diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/index/RandomPostingsTester.java b/lucene/test-framework/src/java/org/apache/lucene/tests/index/RandomPostingsTester.java index 2b365143304d..9f4a20391334 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/tests/index/RandomPostingsTester.java +++ b/lucene/test-framework/src/java/org/apache/lucene/tests/index/RandomPostingsTester.java @@ -55,6 +55,7 @@ import org.apache.lucene.index.Impacts; import org.apache.lucene.index.ImpactsEnum; import org.apache.lucene.index.IndexOptions; +import org.apache.lucene.index.MergePolicy; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.index.PostingsEnum; import org.apache.lucene.index.SegmentInfo; @@ -825,7 +826,7 @@ public long longValue() throws IOException { } @Override - public void checkIntegrity() throws IOException {} + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException {} }; FieldsConsumer consumer = codec.postingsFormat().fieldsConsumer(writeState); boolean success = false;