You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2026/07/14 11:36:22 UTC
(lucene) branch main updated: Remove IOException from LeafReader.getDocValuesSkipper() (#16388)
This is an automated email from the ASF dual-hosted git repository.
romseygeek pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/main by this push:
new 1593f87193b Remove IOException from LeafReader.getDocValuesSkipper() (#16388)
1593f87193b is described below
commit 1593f87193b8bb08306f113cab8d35a49b714bba
Author: Alan Woodward <ro...@apache.org>
AuthorDate: Tue Jul 14 12:36:16 2026 +0100
Remove IOException from LeafReader.getDocValuesSkipper() (#16388)
All of the global metadata available without calling advance() on a
skipper is loaded at Skipper creation time and can therefore be
returned without doing any IO. The only reason we need to do IO
to create a Skipper is slicing an IndexInput, and that can be done
lazily in advance() as skippers are designed to only be consumed
in a single thread. This removes the throws declaration from
LeafReader.getDocValuesSkipper(), which in combination with a similar
change on PointValues makes numeric field metadata available
without IO.
---
lucene/CHANGES.txt | 7 +++-
.../apache/lucene/codecs/DocValuesProducer.java | 2 +-
.../codecs/lucene90/Lucene90DocValuesProducer.java | 10 ++++-
.../codecs/perfield/PerFieldDocValuesFormat.java | 2 +-
.../java/org/apache/lucene/index/CodecReader.java | 2 +-
.../apache/lucene/index/DocValuesLeafReader.java | 2 +-
.../org/apache/lucene/index/DocValuesSkipper.java | 6 +--
.../org/apache/lucene/index/FilterLeafReader.java | 2 +-
.../java/org/apache/lucene/index/LeafReader.java | 2 +-
.../apache/lucene/index/ParallelLeafReader.java | 2 +-
.../lucene/index/SegmentDocValuesProducer.java | 2 +-
.../java/org/apache/lucene/index/SegmentOrder.java | 48 +++++++++-------------
.../lucene/index/SlowCodecReaderWrapper.java | 2 +-
.../index/SlowCompositeCodecReaderWrapper.java | 2 +-
.../apache/lucene/index/SortingCodecReader.java | 2 +-
.../apache/lucene/search/NumericFieldStats.java | 8 ++--
.../search/highlight/TermVectorLeafReader.java | 2 +-
.../apache/lucene/index/memory/MemoryIndex.java | 2 +-
.../codecs/asserting/AssertingDocValuesFormat.java | 2 +-
.../lucene/tests/index/AssertingLeafReader.java | 2 +-
.../lucene/tests/index/MergeReaderWrapper.java | 2 +-
.../lucene/tests/index/MismatchedCodecReader.java | 2 +-
.../org/apache/lucene/tests/search/QueryUtils.java | 2 +-
23 files changed, 57 insertions(+), 58 deletions(-)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index a1896e142c9..cfb3f46e77b 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -98,6 +98,11 @@ API Changes
* GITHUB#16052: Remove IOException from LeafReader#getPointValues, LeafReader#terms,
LeafReader#getDocCount signatures. (Ignacio Vera)
+* GITHUB#16388: Remove IOException from LeafReader#getDocValuesSkipper signature.
+ (Alan Woodward)
+
+* GITHUB#16387: Don't throw IOException from PointValues metadata methods. (Alan Woodward)
+
* GITHUB#16281: The checkIntegrity() method of codec Producer APIs gains a OneMerge parameter,
which is used to check for aborted merges during checksum validation. (Tanguy Leroux)
@@ -313,8 +318,6 @@ API Changes
* GITHUB#16363: Add API to use a custom `DictionarySuggester` instead of hardcoded `GeneratingSuggester`
-* GITHUB#16387: Don't throw IOException from PointValues metadata methods. (Alan Woodward)
-
New Features
---------------------
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 ea9cb78b0ed..7ed86e8f87f 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java
@@ -81,7 +81,7 @@ public abstract class DocValuesProducer implements Closeable {
* thread-safe: it will only be used by a single thread. The return value is undefined if {@link
* FieldInfo#docValuesSkipIndexType()} returns {@link DocValuesSkipIndexType#NONE}.
*/
- public abstract DocValuesSkipper getSkipper(FieldInfo field) throws IOException;
+ public abstract DocValuesSkipper getSkipper(FieldInfo field);
/**
* Checks consistency of this producer
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 fcb1dad93d3..25eefc2660c 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
@@ -2516,13 +2516,16 @@ final class Lucene90DocValuesProducer extends DocValuesProducer {
}
@Override
- public DocValuesSkipper getSkipper(FieldInfo field) throws IOException {
+ public DocValuesSkipper getSkipper(FieldInfo field) {
final DocValuesSkipperEntry entry = skippers.get(field.number);
final IndexInput skipperSource = skipIndexData != null ? skipIndexData : data;
- final IndexInput input = skipperSource.slice("doc value skipper", entry.offset, entry.length);
+
// TODO: should we write to disk the actual max level for this segment?
return new DocValuesSkipper() {
+
+ IndexInput input;
+
final int[] minDocID = new int[SKIP_INDEX_MAX_LEVEL];
final int[] maxDocID = new int[SKIP_INDEX_MAX_LEVEL];
@@ -2539,6 +2542,9 @@ final class Lucene90DocValuesProducer extends DocValuesProducer {
@Override
public void advance(int target) throws IOException {
+ if (input == null) {
+ input = skipperSource.slice("doc value skipper", entry.offset, entry.length);
+ }
if (target > entry.maxDocId) {
// skipper is exhausted
for (int i = 0; i < SKIP_INDEX_MAX_LEVEL; i++) {
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 9954c40de7d..b43d551032f 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
@@ -343,7 +343,7 @@ public abstract class PerFieldDocValuesFormat extends DocValuesFormat {
}
@Override
- public DocValuesSkipper getSkipper(FieldInfo field) throws IOException {
+ public DocValuesSkipper getSkipper(FieldInfo field) {
DocValuesProducer producer = fields.get(field.number);
return producer == null ? null : producer.getSkipper(field);
}
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 9e579a23a33..4f7a1ea213e 100644
--- a/lucene/core/src/java/org/apache/lucene/index/CodecReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/CodecReader.java
@@ -197,7 +197,7 @@ public abstract class CodecReader extends LeafReader {
}
@Override
- public final DocValuesSkipper getDocValuesSkipper(String field) throws IOException {
+ public final DocValuesSkipper getDocValuesSkipper(String field) {
ensureOpen();
FieldInfo fi = getFieldInfos().fieldInfo(field);
if (fi == null || fi.docValuesSkipIndexType() == DocValuesSkipIndexType.NONE) {
diff --git a/lucene/core/src/java/org/apache/lucene/index/DocValuesLeafReader.java b/lucene/core/src/java/org/apache/lucene/index/DocValuesLeafReader.java
index c7635c08fd4..86f9482606d 100644
--- a/lucene/core/src/java/org/apache/lucene/index/DocValuesLeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/DocValuesLeafReader.java
@@ -113,7 +113,7 @@ abstract class DocValuesLeafReader extends LeafReader {
}
@Override
- public DocValuesSkipper getDocValuesSkipper(String field) throws IOException {
+ public DocValuesSkipper getDocValuesSkipper(String field) {
throw new UnsupportedOperationException();
}
}
diff --git a/lucene/core/src/java/org/apache/lucene/index/DocValuesSkipper.java b/lucene/core/src/java/org/apache/lucene/index/DocValuesSkipper.java
index 0dd105d6b46..0ab5cec3312 100644
--- a/lucene/core/src/java/org/apache/lucene/index/DocValuesSkipper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/DocValuesSkipper.java
@@ -142,7 +142,7 @@ public abstract class DocValuesSkipper {
* @param reader the index reader to be queried
* @param field the field to retrieve values for
*/
- public static long globalMinValue(IndexReader reader, String field) throws IOException {
+ public static long globalMinValue(IndexReader reader, String field) {
long minValue = Long.MAX_VALUE;
for (LeafReaderContext ctx : reader.leaves()) {
if (ctx.reader().getFieldInfos().fieldInfo(field) == null) {
@@ -166,7 +166,7 @@ public abstract class DocValuesSkipper {
* @param reader the index reader to be queried
* @param field the field to retrieve values for
*/
- public static long globalMaxValue(IndexReader reader, String field) throws IOException {
+ public static long globalMaxValue(IndexReader reader, String field) {
long maxValue = Long.MIN_VALUE;
for (LeafReaderContext ctx : reader.leaves()) {
if (ctx.reader().getFieldInfos().fieldInfo(field) == null) {
@@ -189,7 +189,7 @@ public abstract class DocValuesSkipper {
* @param reader the index reader to be queried
* @param field the field to retrieve values for
*/
- public static int globalDocCount(IndexReader reader, String field) throws IOException {
+ public static int globalDocCount(IndexReader reader, String field) {
int docCount = 0;
for (LeafReaderContext ctx : reader.leaves()) {
DocValuesSkipper skipper = ctx.reader().getDocValuesSkipper(field);
diff --git a/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java b/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
index e11dd33c0d0..e571f890c32 100644
--- a/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
@@ -451,7 +451,7 @@ public abstract class FilterLeafReader extends LeafReader {
}
@Override
- public DocValuesSkipper getDocValuesSkipper(String field) throws IOException {
+ public DocValuesSkipper getDocValuesSkipper(String field) {
ensureOpen();
return in.getDocValuesSkipper(field);
}
diff --git a/lucene/core/src/java/org/apache/lucene/index/LeafReader.java b/lucene/core/src/java/org/apache/lucene/index/LeafReader.java
index 8e010151274..91aecdeb228 100644
--- a/lucene/core/src/java/org/apache/lucene/index/LeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/LeafReader.java
@@ -209,7 +209,7 @@ public abstract non-sealed class LeafReader extends IndexReader {
* interest, or {@code null} if a skip index was not indexed. The returned instance should be
* confined to the thread that created it.
*/
- public abstract DocValuesSkipper getDocValuesSkipper(String field) throws IOException;
+ public abstract DocValuesSkipper getDocValuesSkipper(String field);
/**
* Returns {@link FloatVectorValues} for this field, or null if no {@link FloatVectorValues} were
diff --git a/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java b/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
index 237347ae94d..036a8fbdd15 100644
--- a/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/ParallelLeafReader.java
@@ -428,7 +428,7 @@ public class ParallelLeafReader extends LeafReader {
}
@Override
- public DocValuesSkipper getDocValuesSkipper(String field) throws IOException {
+ public DocValuesSkipper getDocValuesSkipper(String field) {
ensureOpen();
LeafReader reader = fieldToReader.get(field);
return reader == null ? null : reader.getDocValuesSkipper(field);
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 912f833eec7..542325eaefb 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SegmentDocValuesProducer.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SegmentDocValuesProducer.java
@@ -124,7 +124,7 @@ class SegmentDocValuesProducer extends DocValuesProducer {
}
@Override
- public DocValuesSkipper getSkipper(FieldInfo field) throws IOException {
+ public DocValuesSkipper getSkipper(FieldInfo field) {
DocValuesProducer dvProducer = dvProducersByField.get(field.number);
assert dvProducer != null;
return dvProducer.getSkipper(field);
diff --git a/lucene/core/src/java/org/apache/lucene/index/SegmentOrder.java b/lucene/core/src/java/org/apache/lucene/index/SegmentOrder.java
index 6f111cfbeeb..ea3c455c7be 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SegmentOrder.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SegmentOrder.java
@@ -142,39 +142,31 @@ public abstract class SegmentOrder {
}
private long loadSortValue(LeafReader reader) {
- try {
- DocValuesSkipper skipper = reader.getDocValuesSkipper(field);
- if (skipper != null) {
- if (skipper.docCount() == reader.maxDoc() || missingValue == null) {
- return reverse ? skipper.maxValue() : skipper.minValue();
- }
- if (reverse) {
- return Math.max(skipper.maxValue(), missingValue);
- } else {
- return Math.min(skipper.minValue(), missingValue);
- }
+ DocValuesSkipper skipper = reader.getDocValuesSkipper(field);
+ if (skipper != null) {
+ if (skipper.docCount() == reader.maxDoc() || missingValue == null) {
+ return reverse ? skipper.maxValue() : skipper.minValue();
}
- PointValues pointValues = reader.getPointValues(field);
- if (pointValues != null) {
- if (pointValues.getDocCount() == reader.maxDoc() || missingValue == null) {
- if (reverse) {
- return pointDecoder.applyAsLong(pointValues.getMaxPackedValue());
- } else {
- return pointDecoder.applyAsLong(pointValues.getMinPackedValue());
- }
- }
+ if (reverse) {
+ return Math.max(skipper.maxValue(), missingValue);
+ } else {
+ return Math.min(skipper.minValue(), missingValue);
+ }
+ }
+ PointValues pointValues = reader.getPointValues(field);
+ if (pointValues != null) {
+ if (pointValues.getDocCount() == reader.maxDoc() || missingValue == null) {
if (reverse) {
- return Math.max(
- pointDecoder.applyAsLong(pointValues.getMaxPackedValue()), missingValue);
+ return pointDecoder.applyAsLong(pointValues.getMaxPackedValue());
} else {
- return Math.min(
- pointDecoder.applyAsLong(pointValues.getMinPackedValue()), missingValue);
+ return pointDecoder.applyAsLong(pointValues.getMinPackedValue());
}
}
- } catch (IOException _) {
- // We can't rethrow exceptions from inside a Comparator, so we instead
- // return as if there are no index structures to read values from.
- return reverse ? Long.MAX_VALUE : Long.MIN_VALUE;
+ if (reverse) {
+ return Math.max(pointDecoder.applyAsLong(pointValues.getMaxPackedValue()), missingValue);
+ } else {
+ return Math.min(pointDecoder.applyAsLong(pointValues.getMinPackedValue()), missingValue);
+ }
}
return reverse ? Long.MAX_VALUE : Long.MIN_VALUE;
}
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 555f459b699..8b09766bf0c 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SlowCodecReaderWrapper.java
@@ -264,7 +264,7 @@ public final class SlowCodecReaderWrapper {
}
@Override
- public DocValuesSkipper getSkipper(FieldInfo field) throws IOException {
+ public DocValuesSkipper getSkipper(FieldInfo field) {
return reader.getDocValuesSkipper(field.name);
}
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 be5a8dbb766..7f92668458d 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SlowCompositeCodecReaderWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SlowCompositeCodecReaderWrapper.java
@@ -487,7 +487,7 @@ final class SlowCompositeCodecReaderWrapper extends CodecReader {
}
@Override
- public DocValuesSkipper getSkipper(FieldInfo field) throws IOException {
+ public DocValuesSkipper getSkipper(FieldInfo field) {
throw new UnsupportedOperationException("This method is for searching not for merging");
}
}
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 2f3ff5213dc..f21c87cdb00 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SortingCodecReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SortingCodecReader.java
@@ -711,7 +711,7 @@ public final class SortingCodecReader extends FilterCodecReader {
}
@Override
- public DocValuesSkipper getSkipper(FieldInfo field) throws IOException {
+ public DocValuesSkipper getSkipper(FieldInfo field) {
// We can hardly return information about min/max values if doc IDs have been reordered.
return null;
}
diff --git a/lucene/core/src/java/org/apache/lucene/search/NumericFieldStats.java b/lucene/core/src/java/org/apache/lucene/search/NumericFieldStats.java
index 1a529947b3f..49980c6df24 100644
--- a/lucene/core/src/java/org/apache/lucene/search/NumericFieldStats.java
+++ b/lucene/core/src/java/org/apache/lucene/search/NumericFieldStats.java
@@ -16,7 +16,6 @@
*/
package org.apache.lucene.search;
-import java.io.IOException;
import org.apache.lucene.index.DocValuesSkipper;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.LeafReader;
@@ -51,9 +50,8 @@ public final class NumericFieldStats {
* @param field the name of the numeric field
* @return a {@link Stats} containing the global min, max, and doc count, or {@code null} if
* neither {@link PointValues} nor {@link DocValuesSkipper} are available for the field
- * @throws IOException if an I/O error occurs
*/
- public static Stats getStats(IndexReader reader, String field) throws IOException {
+ public static Stats getStats(IndexReader reader, String field) {
final Stats result = getStatsFromPoints(reader, field);
if (result != null) {
return result;
@@ -61,7 +59,7 @@ public final class NumericFieldStats {
return getStatsFromSkipper(reader, field);
}
- private static Stats getStatsFromPoints(IndexReader reader, String field) throws IOException {
+ private static Stats getStatsFromPoints(IndexReader reader, String field) {
final byte[] minPacked = PointValues.getMinPackedValue(reader, field);
final byte[] maxPacked = PointValues.getMaxPackedValue(reader, field);
if (minPacked == null
@@ -74,7 +72,7 @@ public final class NumericFieldStats {
return new Stats(decodeLong(minPacked), decodeLong(maxPacked), docCount);
}
- private static Stats getStatsFromSkipper(IndexReader reader, String field) throws IOException {
+ private static Stats getStatsFromSkipper(IndexReader reader, String field) {
Long min = null;
Long max = null;
int docCount = 0;
diff --git a/lucene/highlighter/src/java/org/apache/lucene/search/highlight/TermVectorLeafReader.java b/lucene/highlighter/src/java/org/apache/lucene/search/highlight/TermVectorLeafReader.java
index 85aa566a646..0a03a61f5b1 100644
--- a/lucene/highlighter/src/java/org/apache/lucene/search/highlight/TermVectorLeafReader.java
+++ b/lucene/highlighter/src/java/org/apache/lucene/search/highlight/TermVectorLeafReader.java
@@ -146,7 +146,7 @@ public class TermVectorLeafReader extends LeafReader {
}
@Override
- public DocValuesSkipper getDocValuesSkipper(String field) throws IOException {
+ public DocValuesSkipper getDocValuesSkipper(String field) {
return null;
}
diff --git a/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java b/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
index f56e14de9d4..6d3f7f8dc2f 100644
--- a/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
+++ b/lucene/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
@@ -1724,7 +1724,7 @@ public class MemoryIndex {
}
@Override
- public DocValuesSkipper getDocValuesSkipper(String field) throws IOException {
+ public DocValuesSkipper getDocValuesSkipper(String field) {
// Skipping isn't needed on a 1-doc index.
return null;
}
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 de0c536d888..d9903cb9197 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
@@ -294,7 +294,7 @@ public class AssertingDocValuesFormat extends DocValuesFormat {
}
@Override
- public DocValuesSkipper getSkipper(FieldInfo field) throws IOException {
+ public DocValuesSkipper getSkipper(FieldInfo field) {
assert fieldInfos.fieldInfo(field.name).number == field.number;
assert field.docValuesSkipIndexType() != DocValuesSkipIndexType.NONE;
DocValuesSkipper skipper = in.getSkipper(field);
diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/index/AssertingLeafReader.java b/lucene/test-framework/src/java/org/apache/lucene/tests/index/AssertingLeafReader.java
index 24e1c55fbad..bdedb641c47 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/tests/index/AssertingLeafReader.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/tests/index/AssertingLeafReader.java
@@ -1823,7 +1823,7 @@ public class AssertingLeafReader extends FilterLeafReader {
}
@Override
- public DocValuesSkipper getDocValuesSkipper(String field) throws IOException {
+ public DocValuesSkipper getDocValuesSkipper(String field) {
DocValuesSkipper skipper = super.getDocValuesSkipper(field);
FieldInfo fi = getFieldInfos().fieldInfo(field);
if (skipper != null) {
diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/index/MergeReaderWrapper.java b/lucene/test-framework/src/java/org/apache/lucene/tests/index/MergeReaderWrapper.java
index be846b6c654..3d2c802413d 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/tests/index/MergeReaderWrapper.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/tests/index/MergeReaderWrapper.java
@@ -190,7 +190,7 @@ class MergeReaderWrapper extends LeafReader {
}
@Override
- public DocValuesSkipper getDocValuesSkipper(String field) throws IOException {
+ public DocValuesSkipper getDocValuesSkipper(String field) {
ensureOpen();
FieldInfo fi = getFieldInfos().fieldInfo(field);
if (fi == null) {
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 12709de0a80..bad68679475 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
@@ -162,7 +162,7 @@ public class MismatchedCodecReader extends FilterCodecReader {
}
@Override
- public DocValuesSkipper getSkipper(FieldInfo field) throws IOException {
+ public DocValuesSkipper getSkipper(FieldInfo field) {
return in.getSkipper(remapFieldInfo(field));
}
diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/search/QueryUtils.java b/lucene/test-framework/src/java/org/apache/lucene/tests/search/QueryUtils.java
index 737e4184386..41d94746d0d 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/tests/search/QueryUtils.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/tests/search/QueryUtils.java
@@ -228,7 +228,7 @@ public class QueryUtils {
}
@Override
- public DocValuesSkipper getDocValuesSkipper(String field) throws IOException {
+ public DocValuesSkipper getDocValuesSkipper(String field) {
return null;
}