diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 31f6557969f0..d0748b1b735a 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -310,6 +310,8 @@ 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/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextBKDReader.java b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextBKDReader.java
index 3c574375443e..6ba536669376 100644
--- a/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextBKDReader.java
+++ b/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextBKDReader.java
@@ -444,17 +444,17 @@ public byte[] getMaxPackedValue() {
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
return config.numDims();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
return config.numIndexDims();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
return config.bytesPerDim();
}
diff --git a/lucene/core/src/java/org/apache/lucene/index/ExitableDirectoryReader.java b/lucene/core/src/java/org/apache/lucene/index/ExitableDirectoryReader.java
index 42eb41b0dcaa..ef58d3d1136c 100644
--- a/lucene/core/src/java/org/apache/lucene/index/ExitableDirectoryReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/ExitableDirectoryReader.java
@@ -646,31 +646,31 @@ public PointTree getPointTree() throws IOException {
}
@Override
- public byte[] getMinPackedValue() throws IOException {
+ public byte[] getMinPackedValue() {
checkAndThrow();
return in.getMinPackedValue();
}
@Override
- public byte[] getMaxPackedValue() throws IOException {
+ public byte[] getMaxPackedValue() {
checkAndThrow();
return in.getMaxPackedValue();
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
checkAndThrow();
return in.getNumDimensions();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
checkAndThrow();
return in.getNumIndexDimensions();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
checkAndThrow();
return in.getBytesPerDimension();
}
diff --git a/lucene/core/src/java/org/apache/lucene/index/PointValues.java b/lucene/core/src/java/org/apache/lucene/index/PointValues.java
index 328bdedb0574..d795a8c3a31d 100644
--- a/lucene/core/src/java/org/apache/lucene/index/PointValues.java
+++ b/lucene/core/src/java/org/apache/lucene/index/PointValues.java
@@ -118,7 +118,7 @@ public abstract class PointValues {
*
* @see PointValues#size()
*/
- public static long size(IndexReader reader, String field) throws IOException {
+ public static long size(IndexReader reader, String field) {
long size = 0;
for (LeafReaderContext ctx : reader.leaves()) {
PointValues values = ctx.reader().getPointValues(field);
@@ -135,7 +135,7 @@ public static long size(IndexReader reader, String field) throws IOException {
*
* @see PointValues#getDocCount()
*/
- public static int getDocCount(IndexReader reader, String field) throws IOException {
+ public static int getDocCount(IndexReader reader, String field) {
int count = 0;
for (LeafReaderContext ctx : reader.leaves()) {
PointValues values = ctx.reader().getPointValues(field);
@@ -152,7 +152,7 @@ public static int getDocCount(IndexReader reader, String field) throws IOExcepti
*
* @see PointValues#getMinPackedValue()
*/
- public static byte[] getMinPackedValue(IndexReader reader, String field) throws IOException {
+ public static byte[] getMinPackedValue(IndexReader reader, String field) {
byte[] minValue = null;
for (LeafReaderContext ctx : reader.leaves()) {
PointValues values = ctx.reader().getPointValues(field);
@@ -187,7 +187,7 @@ public static byte[] getMinPackedValue(IndexReader reader, String field) throws
*
* @see PointValues#getMaxPackedValue()
*/
- public static byte[] getMaxPackedValue(IndexReader reader, String field) throws IOException {
+ public static byte[] getMaxPackedValue(IndexReader reader, String field) {
byte[] maxValue = null;
for (LeafReaderContext ctx : reader.leaves()) {
PointValues values = ctx.reader().getPointValues(field);
@@ -473,21 +473,21 @@ public final long estimateDocCount(IntersectVisitor visitor) {
/**
* Returns minimum value for each dimension, packed, or null if {@link #size} is 0
*/
- public abstract byte[] getMinPackedValue() throws IOException;
+ public abstract byte[] getMinPackedValue();
/**
* Returns maximum value for each dimension, packed, or null if {@link #size} is 0
*/
- public abstract byte[] getMaxPackedValue() throws IOException;
+ public abstract byte[] getMaxPackedValue();
/** Returns how many dimensions are represented in the values */
- public abstract int getNumDimensions() throws IOException;
+ public abstract int getNumDimensions();
/** Returns how many dimensions are used for the index */
- public abstract int getNumIndexDimensions() throws IOException;
+ public abstract int getNumIndexDimensions();
/** Returns the number of bytes per dimension */
- public abstract int getBytesPerDimension() throws IOException;
+ public abstract int getBytesPerDimension();
/** Returns the total number of indexed points across all documents. */
public abstract long size();
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 7bfde5c16ca1..490c3840783a 100644
--- a/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/index/PointValuesWriter.java
@@ -286,32 +286,32 @@ public PointValues getValues(String fieldName) {
}
return new PointValues() {
@Override
- public PointTree getPointTree() throws IOException {
+ public PointTree getPointTree() {
return values;
}
@Override
- public byte[] getMinPackedValue() throws IOException {
+ public byte[] getMinPackedValue() {
throw new UnsupportedOperationException();
}
@Override
- public byte[] getMaxPackedValue() throws IOException {
+ public byte[] getMaxPackedValue() {
throw new UnsupportedOperationException();
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
throw new UnsupportedOperationException();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
throw new UnsupportedOperationException();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
throw new UnsupportedOperationException();
}
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 a7d8bf2abd78..be5a8dbb7662 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SlowCompositeCodecReaderWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SlowCompositeCodecReaderWrapper.java
@@ -17,7 +17,6 @@
package org.apache.lucene.index;
import java.io.IOException;
-import java.io.UncheckedIOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -613,7 +612,7 @@ public PointValues getValues(String field) {
return new PointValues() {
@Override
- public PointTree getPointTree() throws IOException {
+ public PointTree getPointTree() {
return new PointTree() {
@Override
@@ -681,110 +680,98 @@ public boolean moveToChild() throws IOException {
@Override
public byte[] getMinPackedValue() {
- try {
- byte[] minPackedValue = null;
- for (PointValuesSub sub : values) {
- if (minPackedValue == null) {
- minPackedValue = sub.sub.getMinPackedValue().clone();
- } else {
- byte[] leafMinPackedValue = sub.sub.getMinPackedValue();
- int numIndexDimensions = sub.sub.getNumIndexDimensions();
- int numBytesPerDimension = sub.sub.getBytesPerDimension();
- ArrayUtil.ByteArrayComparator comparator =
- ArrayUtil.getUnsignedComparator(numBytesPerDimension);
- for (int i = 0; i < numIndexDimensions; ++i) {
- if (comparator.compare(
- leafMinPackedValue,
- i * numBytesPerDimension,
- minPackedValue,
- i * numBytesPerDimension)
- < 0) {
- System.arraycopy(
+ byte[] minPackedValue = null;
+ for (PointValuesSub sub : values) {
+ if (minPackedValue == null) {
+ minPackedValue = sub.sub.getMinPackedValue().clone();
+ } else {
+ byte[] leafMinPackedValue = sub.sub.getMinPackedValue();
+ int numIndexDimensions = sub.sub.getNumIndexDimensions();
+ int numBytesPerDimension = sub.sub.getBytesPerDimension();
+ ArrayUtil.ByteArrayComparator comparator =
+ ArrayUtil.getUnsignedComparator(numBytesPerDimension);
+ for (int i = 0; i < numIndexDimensions; ++i) {
+ if (comparator.compare(
leafMinPackedValue,
i * numBytesPerDimension,
minPackedValue,
- i * numBytesPerDimension,
- numBytesPerDimension);
- }
+ i * numBytesPerDimension)
+ < 0) {
+ System.arraycopy(
+ leafMinPackedValue,
+ i * numBytesPerDimension,
+ minPackedValue,
+ i * numBytesPerDimension,
+ numBytesPerDimension);
}
}
}
- return minPackedValue;
- } catch (IOException e) {
- throw new UncheckedIOException(e);
}
+ return minPackedValue;
}
@Override
public byte[] getMaxPackedValue() {
- try {
- byte[] maxPackedValue = null;
- for (PointValuesSub sub : values) {
- if (maxPackedValue == null) {
- maxPackedValue = sub.sub.getMaxPackedValue().clone();
- } else {
- byte[] leafMinPackedValue = sub.sub.getMaxPackedValue();
- int numIndexDimensions = sub.sub.getNumIndexDimensions();
- int numBytesPerDimension = sub.sub.getBytesPerDimension();
- ArrayUtil.ByteArrayComparator comparator =
- ArrayUtil.getUnsignedComparator(numBytesPerDimension);
- for (int i = 0; i < numIndexDimensions; ++i) {
- if (comparator.compare(
- leafMinPackedValue,
- i * numBytesPerDimension,
- maxPackedValue,
- i * numBytesPerDimension)
- > 0) {
- System.arraycopy(
+ byte[] maxPackedValue = null;
+ for (PointValuesSub sub : values) {
+ if (maxPackedValue == null) {
+ maxPackedValue = sub.sub.getMaxPackedValue().clone();
+ } else {
+ byte[] leafMinPackedValue = sub.sub.getMaxPackedValue();
+ int numIndexDimensions = sub.sub.getNumIndexDimensions();
+ int numBytesPerDimension = sub.sub.getBytesPerDimension();
+ ArrayUtil.ByteArrayComparator comparator =
+ ArrayUtil.getUnsignedComparator(numBytesPerDimension);
+ for (int i = 0; i < numIndexDimensions; ++i) {
+ if (comparator.compare(
leafMinPackedValue,
i * numBytesPerDimension,
maxPackedValue,
- i * numBytesPerDimension,
- numBytesPerDimension);
- }
+ i * numBytesPerDimension)
+ > 0) {
+ System.arraycopy(
+ leafMinPackedValue,
+ i * numBytesPerDimension,
+ maxPackedValue,
+ i * numBytesPerDimension,
+ numBytesPerDimension);
}
}
}
- return maxPackedValue;
- } catch (IOException e) {
- throw new UncheckedIOException(e);
}
+ return maxPackedValue;
}
};
}
@Override
- public byte[] getMinPackedValue() throws IOException {
+ public byte[] getMinPackedValue() {
return getPointTree().getMinPackedValue();
}
@Override
- public byte[] getMaxPackedValue() throws IOException {
+ public byte[] getMaxPackedValue() {
return getPointTree().getMaxPackedValue();
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
return values.get(0).sub.getNumDimensions();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
return values.get(0).sub.getNumIndexDimensions();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
return values.get(0).sub.getBytesPerDimension();
}
@Override
public long size() {
- try {
- return getPointTree().size();
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
+ return getPointTree().size();
}
@Override
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 4cc052cea9f8..2f3ff5213dca 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SortingCodecReader.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SortingCodecReader.java
@@ -84,27 +84,27 @@ public PointTree getPointTree() throws IOException {
}
@Override
- public byte[] getMinPackedValue() throws IOException {
+ public byte[] getMinPackedValue() {
return in.getMinPackedValue();
}
@Override
- public byte[] getMaxPackedValue() throws IOException {
+ public byte[] getMaxPackedValue() {
return in.getMaxPackedValue();
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
return in.getNumDimensions();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
return in.getNumIndexDimensions();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
return in.getBytesPerDimension();
}
diff --git a/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java b/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java
index 9c991e6b1b4a..62e422924b82 100644
--- a/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java
+++ b/lucene/core/src/java/org/apache/lucene/util/bkd/BKDReader.java
@@ -1009,17 +1009,17 @@ public byte[] getMaxPackedValue() {
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
return config.numDims();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
return config.numIndexDims();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
return config.bytesPerDim();
}
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java
index 8ffbf45651d5..e4e0919a221f 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java
@@ -1212,14 +1212,11 @@ public void testIndexReaderWriterWithLeafSorter() throws IOException {
Comparator leafSorter =
Comparator.comparingLong(
r -> {
- try {
- PointValues points = r.getPointValues(FIELD_NAME);
- if (points != null) {
- byte[] sortValue =
- ASC_SORT ? points.getMinPackedValue() : points.getMaxPackedValue();
- return LongPoint.decodeDimension(sortValue, 0);
- }
- } catch (IOException _) {
+ PointValues points = r.getPointValues(FIELD_NAME);
+ if (points != null) {
+ byte[] sortValue =
+ ASC_SORT ? points.getMinPackedValue() : points.getMaxPackedValue();
+ return LongPoint.decodeDimension(sortValue, 0);
}
return MISSING_VALUE;
});
diff --git a/lucene/core/src/test/org/apache/lucene/util/TestDocIdSetBuilder.java b/lucene/core/src/test/org/apache/lucene/util/TestDocIdSetBuilder.java
index efc8642383c4..d5b5cdb28ce2 100644
--- a/lucene/core/src/test/org/apache/lucene/util/TestDocIdSetBuilder.java
+++ b/lucene/core/src/test/org/apache/lucene/util/TestDocIdSetBuilder.java
@@ -334,27 +334,27 @@ public PointTree getPointTree() {
}
@Override
- public byte[] getMinPackedValue() throws IOException {
+ public byte[] getMinPackedValue() {
throw new UnsupportedOperationException();
}
@Override
- public byte[] getMaxPackedValue() throws IOException {
+ public byte[] getMaxPackedValue() {
throw new UnsupportedOperationException();
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
throw new UnsupportedOperationException();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
throw new UnsupportedOperationException();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
throw new UnsupportedOperationException();
}
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 44959bdd7a3b..f56e14de9d41 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
@@ -2131,27 +2131,27 @@ public void visitDocValues(IntersectVisitor visitor) throws IOException {
}
@Override
- public byte[] getMinPackedValue() throws IOException {
+ public byte[] getMinPackedValue() {
return info.minPackedValue;
}
@Override
- public byte[] getMaxPackedValue() throws IOException {
+ public byte[] getMaxPackedValue() {
return info.maxPackedValue;
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
return info.fieldInfo.getPointDimensionCount();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
return info.fieldInfo.getPointDimensionCount();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
return info.fieldInfo.getPointNumBytes();
}
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 17a500601dd0..9edc4225e559 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
@@ -187,42 +187,27 @@ public void visitDocValues(IntersectVisitor visitor) throws IOException {
}
@Override
- public byte[] getMinPackedValue() throws IOException {
- if (random.nextInt(100) == 0) {
- throw new IOException("Fake IOException");
- }
+ public byte[] getMinPackedValue() {
return delegate.getMinPackedValue();
}
@Override
- public byte[] getMaxPackedValue() throws IOException {
- if (random.nextInt(100) == 0) {
- throw new IOException("Fake IOException");
- }
+ public byte[] getMaxPackedValue() {
return delegate.getMaxPackedValue();
}
@Override
- public int getNumDimensions() throws IOException {
- if (random.nextInt(100) == 0) {
- throw new IOException("Fake IOException");
- }
+ public int getNumDimensions() {
return delegate.getNumDimensions();
}
@Override
- public int getNumIndexDimensions() throws IOException {
- if (random.nextInt(100) == 0) {
- throw new IOException("Fake IOException");
- }
+ public int getNumIndexDimensions() {
return delegate.getNumIndexDimensions();
}
@Override
- public int getBytesPerDimension() throws IOException {
- if (random.nextInt(100) == 0) {
- throw new IOException("Fake IOException");
- }
+ public int getBytesPerDimension() {
return delegate.getBytesPerDimension();
}
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 37c6b7de5c0c..24e1c55fbadc 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
@@ -1523,31 +1523,31 @@ public PointTree getPointTree() throws IOException {
}
@Override
- public byte[] getMinPackedValue() throws IOException {
+ public byte[] getMinPackedValue() {
assertThread("Points", creationThread);
return Objects.requireNonNull(in.getMinPackedValue());
}
@Override
- public byte[] getMaxPackedValue() throws IOException {
+ public byte[] getMaxPackedValue() {
assertThread("Points", creationThread);
return Objects.requireNonNull(in.getMaxPackedValue());
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
assertThread("Points", creationThread);
return in.getNumDimensions();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
assertThread("Points", creationThread);
return in.getNumIndexDimensions();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
assertThread("Points", creationThread);
return in.getBytesPerDimension();
}
diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/index/BasePointsFormatTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/tests/index/BasePointsFormatTestCase.java
index 0c4d7e1d7755..7bf19a8a95c2 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/tests/index/BasePointsFormatTestCase.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/tests/index/BasePointsFormatTestCase.java
@@ -1375,27 +1375,27 @@ public void visitDocValues(IntersectVisitor visitor) {
}
@Override
- public byte[] getMinPackedValue() throws IOException {
+ public byte[] getMinPackedValue() {
throw new UnsupportedOperationException();
}
@Override
- public byte[] getMaxPackedValue() throws IOException {
+ public byte[] getMaxPackedValue() {
throw new UnsupportedOperationException();
}
@Override
- public int getNumDimensions() throws IOException {
+ public int getNumDimensions() {
throw new UnsupportedOperationException();
}
@Override
- public int getNumIndexDimensions() throws IOException {
+ public int getNumIndexDimensions() {
throw new UnsupportedOperationException();
}
@Override
- public int getBytesPerDimension() throws IOException {
+ public int getBytesPerDimension() {
throw new UnsupportedOperationException();
}