From dfc19e725c665cb1ad9f70dbb26f265b2f6410c5 Mon Sep 17 00:00:00 2001 From: tlrx Date: Mon, 22 Jun 2026 10:06:48 +0200 Subject: [PATCH 1/2] Check if merge is aborted during file integrity checksums This pull request follows the discussion on #16086. It adds a new `CodecUtil.checksumEntireFile(IndexInput, OneMerge)` that periodically checks whether the merge has been aborted while reading through the file. This avoids spending time checksumming large files when the merge is already cancelled. The check runs every 1 MB. This idea was suggested by Robert (thanks!). It also adds a `checkIntegrity(OneMerge)` to all codec reader/producer base classes, with a default implementation that delegates to the existing `checkIntegrity()`. I think I updated all current codec implementations to propagate the merge to CodecUtil.checksumEntireFile(IndexInput, OneMerge). An alternative change would be to make `checkIntegrity(OneMerge)` abstract and `checkIntegrity()` final, delegating to `checkIntegrity(null)`. That would prevent subclasses from silently ignoring the merge parameter but it would require updating all (backwards and third party) codec implementations. Or just replace `checkIntegrity()` by `checkIntegrity(OneMerge)`. Happy to hear our thoughts on this. --- .../bloom/BloomFilteringPostingsFormat.java | 6 ++ .../codecs/memory/DirectPostingsFormat.java | 7 ++ .../simpletext/SimpleTextNormsFormat.java | 6 ++ .../org/apache/lucene/codecs/CodecUtil.java | 43 ++++++++- .../lucene/codecs/DocValuesConsumer.java | 2 +- .../lucene/codecs/DocValuesProducer.java | 15 ++++ .../apache/lucene/codecs/FieldsConsumer.java | 2 +- .../apache/lucene/codecs/FieldsProducer.java | 15 ++++ .../lucene/codecs/KnnVectorsReader.java | 15 ++++ .../lucene/codecs/KnnVectorsWriter.java | 2 +- .../apache/lucene/codecs/NormsConsumer.java | 2 +- .../apache/lucene/codecs/NormsProducer.java | 15 ++++ .../apache/lucene/codecs/PointsReader.java | 15 ++++ .../apache/lucene/codecs/PointsWriter.java | 2 +- .../lucene/codecs/PostingsReaderBase.java | 15 ++++ .../lucene/codecs/StoredFieldsReader.java | 15 ++++ .../lucene/codecs/StoredFieldsWriter.java | 2 +- .../lucene/codecs/TermVectorsReader.java | 15 ++++ .../lucene/codecs/TermVectorsWriter.java | 2 +- .../Lucene103BlockTreeTermsReader.java | 13 +++ .../lucene104/Lucene104PostingsReader.java | 14 +++ ...Lucene104ScalarQuantizedVectorsReader.java | 7 ++ .../lucene90/Lucene90DocValuesProducer.java | 9 ++ .../lucene90/Lucene90NormsProducer.java | 6 ++ .../codecs/lucene90/Lucene90PointsReader.java | 7 ++ .../codecs/lucene90/Lucene90PointsWriter.java | 2 +- .../lucene90/compressing/FieldsIndex.java | 6 ++ .../compressing/FieldsIndexReader.java | 6 ++ ...Lucene90CompressingStoredFieldsReader.java | 7 ++ ...Lucene90CompressingStoredFieldsWriter.java | 2 +- .../Lucene90CompressingTermVectorsReader.java | 7 ++ .../Lucene90CompressingTermVectorsWriter.java | 2 +- .../lucene99/Lucene99FlatVectorsReader.java | 6 ++ .../lucene99/Lucene99HnswVectorsReader.java | 7 ++ .../perfield/PerFieldDocValuesFormat.java | 8 ++ .../perfield/PerFieldKnnVectorsFormat.java | 8 ++ .../codecs/perfield/PerFieldMergeState.java | 6 ++ .../perfield/PerFieldPostingsFormat.java | 8 ++ .../apache/lucene/codecs/TestCodecUtil.java | 90 +++++++++++++++++++ .../asserting/AssertingDocValuesFormat.java | 6 ++ .../asserting/AssertingKnnVectorsFormat.java | 6 ++ .../asserting/AssertingNormsFormat.java | 6 ++ .../asserting/AssertingPointsFormat.java | 6 ++ .../asserting/AssertingPostingsFormat.java | 6 ++ .../AssertingStoredFieldsFormat.java | 6 ++ .../asserting/AssertingTermVectorsFormat.java | 6 ++ .../codecs/cranky/CrankyPointsFormat.java | 12 +++ .../codecs/ramonly/RAMOnlyPostingsFormat.java | 4 + .../tests/index/MismatchedCodecReader.java | 16 ++++ 49 files changed, 478 insertions(+), 13 deletions(-) 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..47c9ff6fbd84 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; @@ -391,6 +392,11 @@ public void checkIntegrity() throws IOException { delegateFieldsProducer.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegateFieldsProducer.checkIntegrity(merge); + } + @Override public String toString() { return getClass().getSimpleName() 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..5fd618f1b58a 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; @@ -153,6 +154,12 @@ public void checkIntegrity() throws IOException { // otherwise returned the raw postings reader } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + // if we read entirely into ram, we already validated. + // otherwise returned the raw postings reader + } + @Override public String toString() { return getClass().getSimpleName() + "(fields=" + fields.size() + ")"; 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..aa64652cda3c 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; @@ -77,6 +78,11 @@ public void checkIntegrity() throws IOException { impl.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + impl.checkIntegrity(merge); + } + @Override public String toString() { return getClass().getSimpleName() + "(" + impl + ")"; 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..dc1f91acc098 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; @@ -92,6 +93,20 @@ protected DocValuesProducer() {} */ public abstract void checkIntegrity() throws IOException; + /** + * Checks consistency of this producer, periodically checking if the provided merge has been + * aborted. Subclasses should override this to propagate the abort check into expensive checksum + * computations. + * + *

The default implementation delegates to {@link #checkIntegrity()}. + * + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior + * @lucene.internal + */ + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + checkIntegrity(); + } + /** * Returns an instance optimized for merging. This instance may only be consumed in the thread * that called {@link #getMergeInstance()}. 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..17764a9f6d37 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. @@ -42,6 +43,20 @@ protected FieldsProducer() {} */ public abstract void checkIntegrity() throws IOException; + /** + * Checks consistency of this reader, periodically checking if the provided merge has been + * aborted. Subclasses should override this to propagate the abort check into expensive checksum + * computations. + * + *

The default implementation delegates to {@link #checkIntegrity()}. + * + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior + * @lucene.internal + */ + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + checkIntegrity(); + } + /** * Returns an instance optimized for merging. This instance may only be consumed in the thread * that called {@link #getMergeInstance()}. 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..d164b178160f 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; @@ -49,6 +50,20 @@ protected KnnVectorsReader() {} */ public abstract void checkIntegrity() throws IOException; + /** + * Checks consistency of this reader, periodically checking if the provided merge has been + * aborted. Subclasses should override this to propagate the abort check into expensive checksum + * computations. + * + *

The default implementation delegates to {@link #checkIntegrity()}. + * + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior + * @lucene.internal + */ + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + checkIntegrity(); + } + /** * If this reader wraps another for {@code field}, return the underlying reader, else return * {@code this} 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..50b61cf8cdf9 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/NormsConsumer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/NormsConsumer.java @@ -67,7 +67,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) { 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..7bd13e13ef07 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; /** @@ -48,6 +49,20 @@ protected NormsProducer() {} */ public abstract void checkIntegrity() throws IOException; + /** + * Checks consistency of this producer, periodically checking if the provided merge has been + * aborted. Subclasses should override this to propagate the abort check into expensive checksum + * computations. + * + *

The default implementation delegates to {@link #checkIntegrity()}. + * + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior + * @lucene.internal + */ + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + checkIntegrity(); + } + /** * Returns an instance optimized for merging. This instance may only be used from the thread that * acquires it. 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..97546af8bcef 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; /** @@ -41,6 +42,20 @@ protected PointsReader() {} */ public abstract void checkIntegrity() throws IOException; + /** + * Checks consistency of this reader, periodically checking if the provided merge has been + * aborted. Subclasses should override this to propagate the abort check into expensive checksum + * computations. + * + *

The default implementation delegates to {@link #checkIntegrity()}. + * + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior + * @lucene.internal + */ + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + checkIntegrity(); + } + /** * Return {@link PointValues} for the given {@code field}. The behavior is undefined if the given * field doesn't have points enabled on its {@link FieldInfo}. 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..069df1d7bfb4 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/PointsWriter.java @@ -223,7 +223,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..82936e80b3f1 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; @@ -84,6 +85,20 @@ public abstract ImpactsEnum impacts(FieldInfo fieldInfo, BlockTermState state, i */ public abstract void checkIntegrity() throws IOException; + /** + * Checks consistency of this reader, periodically checking if the provided merge has been + * aborted. Subclasses should override this to propagate the abort check into expensive checksum + * computations. + * + *

The default implementation delegates to {@link #checkIntegrity()}. + * + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior + * @lucene.internal + */ + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + checkIntegrity(); + } + @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..53e804d2d3ca 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; @@ -47,6 +48,20 @@ protected StoredFieldsReader() {} */ public abstract void checkIntegrity() throws IOException; + /** + * Checks consistency of this reader, periodically checking if the provided merge has been + * aborted. Subclasses should override this to propagate the abort check into expensive checksum + * computations. + * + *

The default implementation delegates to {@link #checkIntegrity()}. + * + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior + * @lucene.internal + */ + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + checkIntegrity(); + } + /** * 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..ff78811f2996 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; /** @@ -40,6 +41,20 @@ protected TermVectorsReader() {} */ public abstract void checkIntegrity() throws IOException; + /** + * Checks consistency of this reader, periodically checking if the provided merge has been + * aborted. Subclasses should override this to propagate the abort check into expensive checksum + * computations. + * + *

The default implementation delegates to {@link #checkIntegrity()}. + * + * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior + * @lucene.internal + */ + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + checkIntegrity(); + } + /** Create a clone that one caller at a time may use to read term vectors. */ @Override public abstract TermVectorsReader clone(); 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..804133abec87 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; @@ -307,6 +308,18 @@ public void checkIntegrity() throws IOException { postingsReader.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + // terms index + CodecUtil.checksumEntireFile(indexIn, merge); + + // term dictionary + CodecUtil.checksumEntireFile(termsIn, merge); + + // postings + postingsReader.checkIntegrity(merge); + } + @Override public String toString() { return getClass().getSimpleName() 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..d546ab2f2594 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; @@ -1481,6 +1482,19 @@ public void checkIntegrity() throws IOException { } } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + if (docIn != null) { + CodecUtil.checksumEntireFile(docIn, merge); + } + if (posIn != null) { + CodecUtil.checksumEntireFile(posIn, merge); + } + if (payIn != null) { + CodecUtil.checksumEntireFile(payIn, merge); + } + } + @Override public String toString() { return getClass().getSimpleName() 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..f2e4a6387377 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; @@ -226,6 +227,12 @@ public void checkIntegrity() throws IOException { CodecUtil.checksumEntireFile(quantizedVectorData); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + rawVectorsReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(quantizedVectorData, merge); + } + @Override public FloatVectorValues getFloatVectorValues(String field) throws IOException { FieldEntry fi = fields.get(field); 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..6cc9121d8c7f 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; @@ -2287,6 +2288,14 @@ public void checkIntegrity() throws IOException { } } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(data, merge); + if (skipIndexData != null) { + CodecUtil.checksumEntireFile(skipIndexData, merge); + } + } + /** * Reader for longs split into blocks of different bits per values. The longs are requested by * index and must be accessed in monotonically increasing order. 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..cefadd59e5d6 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; @@ -504,6 +505,11 @@ public void checkIntegrity() throws IOException { CodecUtil.checksumEntireFile(data); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(data, merge); + } + @Override public String toString() { return getClass().getSimpleName() + "(fields=" + norms.size() + ")"; 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..586443e3ed45 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; @@ -148,6 +149,12 @@ public void checkIntegrity() throws IOException { CodecUtil.checksumEntireFile(dataIn); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(indexIn, merge); + CodecUtil.checksumEntireFile(dataIn, merge); + } + @Override public void close() throws IOException { IOUtils.close(indexIn, dataIn); 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..efe97b00d15c 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 { @@ -38,6 +39,11 @@ final long getStartPointer(int docID) { /** Check the integrity of the index. */ abstract void checkIntegrity() throws IOException; + /** Check the integrity of the index, with periodic merge abort checks. */ + void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + checkIntegrity(); + } + @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..052df83cb3ef 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; @@ -157,4 +158,9 @@ public long getMaxPointer() { void checkIntegrity() throws IOException { CodecUtil.checksumEntireFile(indexInput); } + + @Override + 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..797885051c8c 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; @@ -760,6 +761,12 @@ public void checkIntegrity() throws IOException { CodecUtil.checksumEntireFile(fieldsStream); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + indexReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(fieldsStream, merge); + } + @Override public String toString() { return getClass().getSimpleName() 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..61dbed51cf7e 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; @@ -1354,6 +1355,12 @@ public void checkIntegrity() throws IOException { CodecUtil.checksumEntireFile(vectorsStream); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + indexReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(vectorsStream, merge); + } + @Override public String toString() { return getClass().getSimpleName() 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..7f2061c43298 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; @@ -194,6 +195,11 @@ public void checkIntegrity() throws IOException { CodecUtil.checksumEntireFile(vectorData); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + CodecUtil.checksumEntireFile(vectorData, merge); + } + @Override public FlatVectorsReader getMergeInstance() throws IOException { // Update the read advice since vectors are guaranteed to be accessed sequentially for merge 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..87b4dcf2031b 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; @@ -267,6 +268,12 @@ public void checkIntegrity() throws IOException { CodecUtil.checksumEntireFile(vectorIndex); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + flatVectorsReader.checkIntegrity(merge); + CodecUtil.checksumEntireFile(vectorIndex, merge); + } + @Override public FloatVectorValues getFloatVectorValues(String field) throws IOException { return flatVectorsReader.getFloatVectorValues(field); 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..1c5ea4239afe 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; @@ -359,6 +360,13 @@ public void checkIntegrity() throws IOException { } } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + for (DocValuesProducer format : formats.values()) { + format.checkIntegrity(merge); + } + } + @Override public DocValuesProducer getMergeInstance() { return new FieldsReader(this); 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..c42c0a0b16c7 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; @@ -273,6 +274,13 @@ public void checkIntegrity() throws IOException { } } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + for (ObjectCursor cursor : fields.values()) { + cursor.value.checkIntegrity(merge); + } + } + @Override public FloatVectorValues getFloatVectorValues(String field) throws IOException { final FieldInfo info = fieldInfos.fieldInfo(field); 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..db4137f87bea 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; @@ -268,5 +269,10 @@ public void close() throws IOException { public void checkIntegrity() throws IOException { in.checkIntegrity(); } + + @Override + 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..88573c18d838 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; @@ -354,6 +355,13 @@ public void checkIntegrity() throws IOException { } } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + for (FieldsProducer producer : formats.values()) { + producer.checkIntegrity(merge); + } + } + @Override public FieldsProducer getMergeInstance() { return new FieldsReader(this); 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/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..661391cd41c0 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; @@ -312,6 +313,11 @@ public void checkIntegrity() throws IOException { in.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); + } + @Override public DocValuesProducer getMergeInstance() { return new AssertingDocValuesProducer(in.getMergeInstance(), fieldInfos, maxDoc, true); 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..0ceaed6c8a9e 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; @@ -130,6 +131,11 @@ public void checkIntegrity() throws IOException { delegate.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + delegate.checkIntegrity(merge); + } + @Override public FloatVectorValues getFloatVectorValues(String field) throws IOException { FieldInfo fi = fis.fieldInfo(field); 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..8db0ff703d9a 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; @@ -117,6 +118,11 @@ public void checkIntegrity() throws IOException { in.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); + } + @Override public NormsProducer getMergeInstance() { return new AssertingNormsProducer(in.getMergeInstance(), maxDoc, true); 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..ffc20d721d28 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; @@ -101,6 +102,11 @@ public void checkIntegrity() throws IOException { in.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); + } + @Override public PointsReader getMergeInstance() { return new AssertingPointsReader(maxDoc, in.getMergeInstance(), fis, true); 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..8afa87f52f6d 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; @@ -92,6 +93,11 @@ public void checkIntegrity() throws IOException { in.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); + } + @Override public FieldsProducer getMergeInstance() { return new AssertingFieldsProducer(in.getMergeInstance()); 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..bf2bb5dd3a78 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; @@ -88,6 +89,11 @@ public void checkIntegrity() throws IOException { in.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); + } + @Override public StoredFieldsReader getMergeInstance() { return new AssertingStoredFieldsReader(in.getMergeInstance(), maxDoc, true); 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..19cabe7a1576 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; @@ -82,6 +83,11 @@ public void checkIntegrity() throws IOException { in.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); + } + @Override public TermVectorsReader getMergeInstance() { return new AssertingTermVectorsReader(in.getMergeInstance()); 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..da13bcba5b78 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; @@ -114,6 +115,17 @@ public void checkIntegrity() throws IOException { } } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + if (random.nextInt(100) == 0) { + throw new IOException("Fake IOException"); + } + delegate.checkIntegrity(merge); + if (random.nextInt(100) == 0) { + throw new IOException("Fake IOException"); + } + } + @Override public PointValues getValues(String fieldName) { final PointValues delegate = this.delegate.getValues(fieldName); 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..4b6f71148117 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; @@ -88,6 +89,9 @@ public void close() {} @Override public void checkIntegrity() throws IOException {} + + @Override + 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/MismatchedCodecReader.java b/lucene/test-framework/src/java/org/apache/lucene/tests/index/MismatchedCodecReader.java index 8c856aafcba2..485bc48b489b 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; @@ -97,6 +98,11 @@ public void checkIntegrity() throws IOException { in.checkIntegrity(); } + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); + } + @Override public void document(int docID, StoredFieldVisitor visitor) throws IOException { in.document(docID, new MismatchedLeafReader.MismatchedVisitor(visitor, shuffled)); @@ -169,6 +175,11 @@ public DocValuesSkipper getSkipper(FieldInfo field) throws IOException { public void checkIntegrity() throws IOException { in.checkIntegrity(); } + + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); + } } @Override @@ -212,5 +223,10 @@ public NumericDocValues getNorms(FieldInfo field) throws IOException { public void checkIntegrity() throws IOException { in.checkIntegrity(); } + + @Override + public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { + in.checkIntegrity(merge); + } } } From 73aa8b9b5de10489b7a3b78bf09fc7a35f61e600 Mon Sep 17 00:00:00 2001 From: tlrx Date: Wed, 24 Jun 2026 14:47:54 +0200 Subject: [PATCH 2/2] checkIntegrity --- .../lucene101/Lucene101PostingsReader.java | 9 +++--- ...Lucene102BinaryQuantizedVectorsReader.java | 7 +++-- .../lucene103/Lucene103PostingsReader.java | 9 +++--- .../lucene80/Lucene80DocValuesProducer.java | 5 ++-- .../lucene90/Lucene90HnswVectorsReader.java | 7 +++-- .../lucene90/Lucene90PostingsReader.java | 9 +++--- .../Lucene90BlockTreeTermsReader.java | 9 +++--- .../lucene91/Lucene91HnswVectorsReader.java | 7 +++-- .../lucene912/Lucene912PostingsReader.java | 9 +++--- .../lucene92/Lucene92HnswVectorsReader.java | 7 +++-- .../lucene94/Lucene94HnswVectorsReader.java | 7 +++-- .../lucene95/Lucene95HnswVectorsReader.java | 7 +++-- .../lucene99/Lucene99PostingsReader.java | 9 +++--- .../Lucene99ScalarQuantizedVectorsReader.java | 7 +++-- .../codecs/blockterms/BlockTermsReader.java | 7 +++-- .../OrdsBlockTreeTermsReader.java | 7 +++-- .../bloom/BloomFilteringPostingsFormat.java | 5 ---- .../codecs/memory/DirectPostingsFormat.java | 8 +----- .../lucene/codecs/memory/FSTTermsReader.java | 5 ++-- .../simpletext/SimpleTextDocValuesReader.java | 3 +- .../simpletext/SimpleTextFieldsReader.java | 3 +- .../SimpleTextKnnVectorsReader.java | 3 +- .../simpletext/SimpleTextNormsFormat.java | 5 ---- .../simpletext/SimpleTextPointsReader.java | 3 +- .../SimpleTextStoredFieldsReader.java | 3 +- .../SimpleTextTermVectorsReader.java | 3 +- .../uniformsplit/UniformSplitTermsReader.java | 7 +++-- .../uniformsplit/TestTermBytesComparator.java | 3 +- .../sharedterms/TestSTBlockReader.java | 3 +- .../lucene/codecs/DocValuesProducer.java | 19 ++----------- .../apache/lucene/codecs/FieldsProducer.java | 19 ++----------- .../lucene/codecs/KnnVectorsFormat.java | 3 +- .../lucene/codecs/KnnVectorsReader.java | 19 ++----------- .../apache/lucene/codecs/NormsConsumer.java | 3 +- .../apache/lucene/codecs/NormsProducer.java | 19 ++----------- .../apache/lucene/codecs/PointsFormat.java | 3 +- .../apache/lucene/codecs/PointsReader.java | 19 ++----------- .../apache/lucene/codecs/PointsWriter.java | 3 +- .../lucene/codecs/PostingsReaderBase.java | 19 ++----------- .../lucene/codecs/StoredFieldsReader.java | 19 ++----------- .../lucene/codecs/TermVectorsReader.java | 19 ++----------- .../Lucene103BlockTreeTermsReader.java | 12 -------- .../lucene104/Lucene104PostingsReader.java | 13 --------- ...Lucene104ScalarQuantizedVectorsReader.java | 6 ---- .../lucene90/Lucene90DocValuesProducer.java | 8 ------ .../lucene90/Lucene90NormsProducer.java | 5 ---- .../codecs/lucene90/Lucene90PointsReader.java | 6 ---- .../lucene90/compressing/FieldsIndex.java | 7 +---- .../compressing/FieldsIndexReader.java | 5 ---- ...Lucene90CompressingStoredFieldsReader.java | 6 ---- .../Lucene90CompressingTermVectorsReader.java | 6 ---- .../lucene99/Lucene99FlatVectorsReader.java | 5 ---- .../lucene99/Lucene99HnswVectorsReader.java | 6 ---- .../perfield/PerFieldDocValuesFormat.java | 7 ----- .../perfield/PerFieldKnnVectorsFormat.java | 7 ----- .../codecs/perfield/PerFieldMergeState.java | 5 ---- .../perfield/PerFieldPostingsFormat.java | 7 ----- .../org/apache/lucene/index/CodecReader.java | 14 +++++----- .../lucene/index/EmptyDocValuesProducer.java | 2 +- .../apache/lucene/index/NormValuesWriter.java | 2 +- .../lucene/index/PointValuesWriter.java | 2 +- .../index/SegmentDocValuesProducer.java | 4 +-- .../lucene/index/SlowCodecReaderWrapper.java | 14 +++++----- .../SlowCompositeCodecReaderWrapper.java | 28 +++++++++---------- .../lucene/index/SortingCodecReader.java | 28 +++++++++---------- .../index/SortingTermVectorsConsumer.java | 2 +- .../org/apache/lucene/index/TestCodecs.java | 2 +- .../lucene/index/TestMultiTermsEnum.java | 4 +-- .../codecs/faiss/FaissKnnVectorsReader.java | 7 +++-- .../idversion/IDVersionPostingsReader.java | 3 +- .../VersionBlockTreeTermsReader.java | 7 +++-- .../document/CompletionFieldsProducer.java | 5 ++-- .../asserting/AssertingDocValuesFormat.java | 5 ---- .../asserting/AssertingKnnVectorsFormat.java | 5 ---- .../asserting/AssertingNormsFormat.java | 5 ---- .../asserting/AssertingPointsFormat.java | 5 ---- .../asserting/AssertingPostingsFormat.java | 5 ---- .../AssertingStoredFieldsFormat.java | 5 ---- .../asserting/AssertingTermVectorsFormat.java | 5 ---- .../codecs/cranky/CrankyPointsFormat.java | 11 -------- .../codecs/ramonly/RAMOnlyPostingsFormat.java | 3 -- .../index/BaseIndexFileFormatTestCase.java | 4 +-- .../tests/index/MismatchedCodecReader.java | 15 ---------- .../tests/index/RandomPostingsTester.java | 3 +- 84 files changed, 194 insertions(+), 452 deletions(-) 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 47c9ff6fbd84..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 @@ -387,11 +387,6 @@ public String toString() { } } - @Override - public void checkIntegrity() throws IOException { - delegateFieldsProducer.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { delegateFieldsProducer.checkIntegrity(merge); 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 5fd618f1b58a..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 @@ -107,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,12 +148,6 @@ public int size() { @Override public void close() {} - @Override - public void checkIntegrity() throws IOException { - // if we read entirely into ram, we already validated. - // otherwise returned the raw postings reader - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // if we read entirely into ram, we already validated. 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 aa64652cda3c..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 @@ -73,11 +73,6 @@ public void close() throws IOException { impl.close(); } - @Override - public void checkIntegrity() throws IOException { - impl.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { impl.checkIntegrity(merge); 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/DocValuesProducer.java b/lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java index dc1f91acc098..ea9cb78b0ed4 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java @@ -87,25 +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. - * - * @lucene.internal - */ - public abstract void checkIntegrity() throws IOException; - - /** - * Checks consistency of this producer, periodically checking if the provided merge has been - * aborted. Subclasses should override this to propagate the abort check into expensive checksum - * computations. - * - *

The default implementation delegates to {@link #checkIntegrity()}. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior - * @lucene.internal */ - public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { - checkIntegrity(); - } + 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/FieldsProducer.java b/lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java index 17764a9f6d37..334a8a5dfff4 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java @@ -37,25 +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. - * - * @lucene.internal - */ - public abstract void checkIntegrity() throws IOException; - - /** - * Checks consistency of this reader, periodically checking if the provided merge has been - * aborted. Subclasses should override this to propagate the abort check into expensive checksum - * computations. - * - *

The default implementation delegates to {@link #checkIntegrity()}. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior - * @lucene.internal */ - public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { - checkIntegrity(); - } + 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 d164b178160f..774548749349 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/KnnVectorsReader.java @@ -44,25 +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. - * - * @lucene.internal - */ - public abstract void checkIntegrity() throws IOException; - - /** - * Checks consistency of this reader, periodically checking if the provided merge has been - * aborted. Subclasses should override this to propagate the abort check into expensive checksum - * computations. - * - *

The default implementation delegates to {@link #checkIntegrity()}. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior - * @lucene.internal */ - public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { - checkIntegrity(); - } + 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/NormsConsumer.java b/lucene/core/src/java/org/apache/lucene/codecs/NormsConsumer.java index 50b61cf8cdf9..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; @@ -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 7bd13e13ef07..700a4213548c 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/NormsProducer.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/NormsProducer.java @@ -43,25 +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. - * - * @lucene.internal - */ - public abstract void checkIntegrity() throws IOException; - - /** - * Checks consistency of this producer, periodically checking if the provided merge has been - * aborted. Subclasses should override this to propagate the abort check into expensive checksum - * computations. - * - *

The default implementation delegates to {@link #checkIntegrity()}. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior - * @lucene.internal */ - public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { - checkIntegrity(); - } + 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 97546af8bcef..aa20f19af162 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/PointsReader.java @@ -36,25 +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. - * - * @lucene.internal - */ - public abstract void checkIntegrity() throws IOException; - - /** - * Checks consistency of this reader, periodically checking if the provided merge has been - * aborted. Subclasses should override this to propagate the abort check into expensive checksum - * computations. - * - *

The default implementation delegates to {@link #checkIntegrity()}. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior - * @lucene.internal */ - public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { - checkIntegrity(); - } + 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 069df1d7bfb4..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(); } }); 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 82936e80b3f1..d49105578cae 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/PostingsReaderBase.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/PostingsReaderBase.java @@ -79,25 +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. - * - * @lucene.internal - */ - public abstract void checkIntegrity() throws IOException; - - /** - * Checks consistency of this reader, periodically checking if the provided merge has been - * aborted. Subclasses should override this to propagate the abort check into expensive checksum - * computations. - * - *

The default implementation delegates to {@link #checkIntegrity()}. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior - * @lucene.internal */ - public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { - checkIntegrity(); - } + 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 53e804d2d3ca..1c0ebe357fe6 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsReader.java @@ -42,25 +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. - * - * @lucene.internal - */ - public abstract void checkIntegrity() throws IOException; - - /** - * Checks consistency of this reader, periodically checking if the provided merge has been - * aborted. Subclasses should override this to propagate the abort check into expensive checksum - * computations. - * - *

The default implementation delegates to {@link #checkIntegrity()}. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior - * @lucene.internal */ - public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { - checkIntegrity(); - } + 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/TermVectorsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java index ff78811f2996..dc30da162998 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java @@ -35,25 +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. - * - * @lucene.internal - */ - public abstract void checkIntegrity() throws IOException; - - /** - * Checks consistency of this reader, periodically checking if the provided merge has been - * aborted. Subclasses should override this to propagate the abort check into expensive checksum - * computations. - * - *

The default implementation delegates to {@link #checkIntegrity()}. + * against large data files. A {@code OneMerge} can be provided so that expensive checksum + * computations can be periodically interrupted when the merge is aborted. * * @param merge the merge to check for abort, or {@code null} for non-interruptible behavior - * @lucene.internal */ - public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { - checkIntegrity(); - } + 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/lucene103/blocktree/Lucene103BlockTreeTermsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene103/blocktree/Lucene103BlockTreeTermsReader.java index 804133abec87..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 @@ -296,18 +296,6 @@ public int size() { return fieldMap.size(); } - @Override - public void checkIntegrity() throws IOException { - // terms index - CodecUtil.checksumEntireFile(indexIn); - - // term dictionary - CodecUtil.checksumEntireFile(termsIn); - - // postings - postingsReader.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { // terms index 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 d546ab2f2594..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 @@ -1469,19 +1469,6 @@ static FreqAndNormBuffer readImpacts(ByteArrayDataInput in, FreqAndNormBuffer re return reuse; } - @Override - public void checkIntegrity() throws IOException { - if (docIn != null) { - CodecUtil.checksumEntireFile(docIn); - } - if (posIn != null) { - CodecUtil.checksumEntireFile(posIn); - } - if (payIn != null) { - CodecUtil.checksumEntireFile(payIn); - } - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { if (docIn != null) { 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 f2e4a6387377..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 @@ -221,12 +221,6 @@ public RandomVectorScorer getRandomVectorScorer(String field, byte[] target) thr return rawVectorsReader.getRandomVectorScorer(field, target); } - @Override - public void checkIntegrity() throws IOException { - rawVectorsReader.checkIntegrity(); - CodecUtil.checksumEntireFile(quantizedVectorData); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { rawVectorsReader.checkIntegrity(merge); 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 6cc9121d8c7f..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 @@ -2280,14 +2280,6 @@ public void intoBitSet(int upTo, FixedBitSet bitSet, int offset) throws IOExcept }; } - @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(data); - if (skipIndexData != null) { - CodecUtil.checksumEntireFile(skipIndexData); - } - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { CodecUtil.checksumEntireFile(data, 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 cefadd59e5d6..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 @@ -500,11 +500,6 @@ public void close() throws IOException { data.close(); } - @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(data); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { CodecUtil.checksumEntireFile(data, merge); 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 586443e3ed45..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 @@ -143,12 +143,6 @@ public PointValues getValues(String fieldName) { return readers.get(fieldInfo.number); } - @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(indexIn); - CodecUtil.checksumEntireFile(dataIn); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { CodecUtil.checksumEntireFile(indexIn, merge); 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 efe97b00d15c..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 @@ -36,13 +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. */ - void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { - checkIntegrity(); - } + 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 052df83cb3ef..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 @@ -154,11 +154,6 @@ public long getMaxPointer() { return maxPointer; } - @Override - void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(indexInput); - } - @Override 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 797885051c8c..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 @@ -755,12 +755,6 @@ int getNumDocs() { return numDocs; } - @Override - public void checkIntegrity() throws IOException { - indexReader.checkIntegrity(); - CodecUtil.checksumEntireFile(fieldsStream); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { indexReader.checkIntegrity(merge); 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 61dbed51cf7e..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 @@ -1349,12 +1349,6 @@ private static int sum(int[] arr) { return sum; } - @Override - public void checkIntegrity() throws IOException { - indexReader.checkIntegrity(); - CodecUtil.checksumEntireFile(vectorsStream); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { indexReader.checkIntegrity(merge); 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 7f2061c43298..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 @@ -190,11 +190,6 @@ public Map getOffHeapByteSize(FieldInfo fieldInfo) { return Map.of(Lucene99FlatVectorsFormat.VECTOR_DATA_EXTENSION, entry.vectorDataLength()); } - @Override - public void checkIntegrity() throws IOException { - CodecUtil.checksumEntireFile(vectorData); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { CodecUtil.checksumEntireFile(vectorData, merge); 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 87b4dcf2031b..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 @@ -262,12 +262,6 @@ public long ramBytesUsed() { + flatVectorsReader.ramBytesUsed(); } - @Override - public void checkIntegrity() throws IOException { - flatVectorsReader.checkIntegrity(); - CodecUtil.checksumEntireFile(vectorIndex); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { flatVectorsReader.checkIntegrity(merge); 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 1c5ea4239afe..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 @@ -353,13 +353,6 @@ public void close() throws IOException { IOUtils.close(formats.values()); } - @Override - public void checkIntegrity() throws IOException { - for (DocValuesProducer format : formats.values()) { - format.checkIntegrity(); - } - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (DocValuesProducer format : formats.values()) { 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 c42c0a0b16c7..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 @@ -267,13 +267,6 @@ public KnnVectorsReader unwrapReaderForField(String field) { return fi != null ? fields.get(fi.number) : this; } - @Override - public void checkIntegrity() throws IOException { - for (ObjectCursor cursor : fields.values()) { - cursor.value.checkIntegrity(); - } - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (ObjectCursor cursor : fields.values()) { 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 db4137f87bea..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 @@ -265,11 +265,6 @@ public void close() throws IOException { in.close(); } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override 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 88573c18d838..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 @@ -348,13 +348,6 @@ public void close() throws IOException { IOUtils.close(formats.values()); } - @Override - public void checkIntegrity() throws IOException { - for (FieldsProducer producer : formats.values()) { - producer.checkIntegrity(); - } - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { for (FieldsProducer producer : formats.values()) { 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/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 661391cd41c0..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 @@ -308,11 +308,6 @@ public void close() throws IOException { in.close(); // close again } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { in.checkIntegrity(merge); 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 0ceaed6c8a9e..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 @@ -126,11 +126,6 @@ private AssertingKnnVectorsReader(KnnVectorsReader delegate, FieldInfos fis) { this.fis = fis; } - @Override - public void checkIntegrity() throws IOException { - delegate.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { delegate.checkIntegrity(merge); 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 8db0ff703d9a..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 @@ -113,11 +113,6 @@ public void close() throws IOException { in.close(); // close again } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { in.checkIntegrity(merge); 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 ffc20d721d28..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 @@ -97,11 +97,6 @@ public PointValues getValues(String field) { return new AssertingLeafReader.AssertingPointValues(values, maxDoc); } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { in.checkIntegrity(merge); 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 8afa87f52f6d..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 @@ -88,11 +88,6 @@ public int size() { return in.size(); } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { in.checkIntegrity(merge); 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 bf2bb5dd3a78..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 @@ -84,11 +84,6 @@ public StoredFieldsReader clone() { return new AssertingStoredFieldsReader(in.clone(), maxDoc, false); } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { in.checkIntegrity(merge); 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 19cabe7a1576..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 @@ -78,11 +78,6 @@ public TermVectorsReader clone() { return new AssertingTermVectorsReader(in.clone()); } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { in.checkIntegrity(merge); 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 da13bcba5b78..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 @@ -104,17 +104,6 @@ public CrankyPointsReader(PointsReader delegate, Random random) { this.random = random; } - @Override - public void checkIntegrity() throws IOException { - if (random.nextInt(100) == 0) { - throw new IOException("Fake IOException"); - } - delegate.checkIntegrity(); - if (random.nextInt(100) == 0) { - throw new IOException("Fake IOException"); - } - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { if (random.nextInt(100) == 0) { 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 4b6f71148117..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 @@ -87,9 +87,6 @@ public Iterator iterator() { @Override public void close() {} - @Override - public void checkIntegrity() throws IOException {} - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException {} } 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 485bc48b489b..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 @@ -93,11 +93,6 @@ public StoredFieldsReader clone() { return new MismatchedStoredFieldsReader(in.clone(), shuffled); } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { in.checkIntegrity(merge); @@ -171,11 +166,6 @@ public DocValuesSkipper getSkipper(FieldInfo field) throws IOException { return in.getSkipper(remapFieldInfo(field)); } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override public void checkIntegrity(MergePolicy.OneMerge merge) throws IOException { in.checkIntegrity(merge); @@ -219,11 +209,6 @@ public NumericDocValues getNorms(FieldInfo field) throws IOException { return in.getNorms(remapFieldInfo(field)); } - @Override - public void checkIntegrity() throws IOException { - in.checkIntegrity(); - } - @Override 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;