You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2025/12/09 07:00:50 UTC
(lucene) branch main updated: Add `@SuppressAssertingFormats` annotation for fine-grained control over `AssertingCodec` formats (#15468)
This is an automated email from the ASF dual-hosted git repository.
dweiss 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 31366b0b438 Add `@SuppressAssertingFormats` annotation for fine-grained control over `AssertingCodec` formats (#15468)
31366b0b438 is described below
commit 31366b0b4381c3884cf56b5be477e31a29763bd1
Author: Prudhvi Godithi <pg...@amazon.com>
AuthorDate: Mon Dec 8 23:00:44 2025 -0800
Add `@SuppressAssertingFormats` annotation for fine-grained control over `AssertingCodec` formats (#15468)
* Add support for SuppressedFormats
Signed-off-by: Prudhvi Godithi <pg...@amazon.com>
* Fix assertions
Signed-off-by: Prudhvi Godithi <pg...@amazon.com>
* Add support for SuppressedFormats
Signed-off-by: Prudhvi Godithi <pg...@amazon.com>
* Code cleanup
Signed-off-by: Prudhvi Godithi <pg...@amazon.com>
* Update changes.txt
Signed-off-by: Prudhvi Godithi <pg...@amazon.com>
* Use enum for supress formats
Signed-off-by: Prudhvi Godithi <pg...@amazon.com>
---------
Signed-off-by: Prudhvi Godithi <pg...@amazon.com>
---
lucene/CHANGES.txt | 2 ++
.../tests/codecs/asserting/AssertingCodec.java | 37 ++++++++++++++++++----
.../apache/lucene/tests/util/LuceneTestCase.java | 13 ++++++++
.../util/TestRuleSetupAndRestoreClassEnv.java | 14 ++++++++
4 files changed, 60 insertions(+), 6 deletions(-)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 6dda8cfa2e3..dce771a04d6 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -191,6 +191,8 @@ New Features
* GITHUB#15415: Add fallback support to Lucene104ScalarQuantizedVectorsFormat getFloatVectorValues when there are
no full-precision vectors present (Pulkit Gupta)
+ * GITHUB#15468: Add support for `@SuppressAssertingFormats` annotation for fine-grained control over `AssertingCodec` formats (Prudhvi Godithi)
+
Improvements
---------------------
* GITHUB#15148: Add support uint8 distance and allow 8 bit scalar quantization (Trevor McCulloch)
diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingCodec.java b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingCodec.java
index 0aded31855e..7ff8d9ab4a9 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingCodec.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/tests/codecs/asserting/AssertingCodec.java
@@ -16,6 +16,9 @@
*/
package org.apache.lucene.tests.codecs.asserting;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Set;
import org.apache.lucene.codecs.DocValuesFormat;
import org.apache.lucene.codecs.FilterCodec;
import org.apache.lucene.codecs.KnnVectorsFormat;
@@ -33,6 +36,28 @@ import org.apache.lucene.tests.util.TestUtil;
/** Acts like the default codec but with additional asserts. */
public class AssertingCodec extends FilterCodec {
+ /** Enum representing asserting format types that can be suppressed. */
+ public enum Format {
+ STORED_FIELDS,
+ TERM_VECTORS,
+ NORMS,
+ LIVE_DOCS,
+ POINTS,
+ KNN_VECTORS
+ }
+
+ private static volatile Set<Format> suppressedFormats = Collections.emptySet();
+
+ /** Set the formats to suppress. */
+ public static void setSuppressedFormats(Set<Format> formats) {
+ suppressedFormats =
+ formats == null || formats.isEmpty() ? Collections.emptySet() : EnumSet.copyOf(formats);
+ }
+
+ private static boolean isSuppressed(Format format) {
+ return suppressedFormats.contains(format);
+ }
+
static void assertThread(String object, Thread creationThread) {
if (creationThread != Thread.currentThread()) {
throw new AssertionError(
@@ -90,12 +115,12 @@ public class AssertingCodec extends FilterCodec {
@Override
public TermVectorsFormat termVectorsFormat() {
- return vectors;
+ return isSuppressed(Format.TERM_VECTORS) ? delegate.termVectorsFormat() : vectors;
}
@Override
public StoredFieldsFormat storedFieldsFormat() {
- return storedFields;
+ return isSuppressed(Format.STORED_FIELDS) ? delegate.storedFieldsFormat() : storedFields;
}
@Override
@@ -105,22 +130,22 @@ public class AssertingCodec extends FilterCodec {
@Override
public NormsFormat normsFormat() {
- return norms;
+ return isSuppressed(Format.NORMS) ? delegate.normsFormat() : norms;
}
@Override
public LiveDocsFormat liveDocsFormat() {
- return liveDocs;
+ return isSuppressed(Format.LIVE_DOCS) ? delegate.liveDocsFormat() : liveDocs;
}
@Override
public PointsFormat pointsFormat() {
- return pointsFormat;
+ return isSuppressed(Format.POINTS) ? delegate.pointsFormat() : pointsFormat;
}
@Override
public KnnVectorsFormat knnVectorsFormat() {
- return knnVectorsFormat;
+ return isSuppressed(Format.KNN_VECTORS) ? delegate.knnVectorsFormat() : knnVectorsFormat;
}
@Override
diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/util/LuceneTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/tests/util/LuceneTestCase.java
index 6c3ab79687e..f754ec67621 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/tests/util/LuceneTestCase.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/tests/util/LuceneTestCase.java
@@ -171,6 +171,7 @@ import org.apache.lucene.store.MergeInfo;
import org.apache.lucene.store.NRTCachingDirectory;
import org.apache.lucene.store.ReadOnceHint;
import org.apache.lucene.tests.analysis.MockAnalyzer;
+import org.apache.lucene.tests.codecs.asserting.AssertingCodec;
import org.apache.lucene.tests.index.AlcoholicMergePolicy;
import org.apache.lucene.tests.index.AssertingDirectoryReader;
import org.apache.lucene.tests.index.AssertingLeafReader;
@@ -350,6 +351,18 @@ public abstract class LuceneTestCase extends Assert {
String[] value();
}
+ /**
+ * Annotation for test classes that should avoid specific asserting formats within the Asserting
+ * codec (e.g., AssertingStoredFieldsFormat) while keeping other asserting formats active.
+ */
+ @Documented
+ @Inherited
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface SuppressAssertingFormats {
+ AssertingCodec.Format[] value();
+ }
+
/**
* Annotation for test classes that should avoid mock filesystem types (because they test a bug
* that only happens on linux, for example).
diff --git a/lucene/test-framework/src/java/org/apache/lucene/tests/util/TestRuleSetupAndRestoreClassEnv.java b/lucene/test-framework/src/java/org/apache/lucene/tests/util/TestRuleSetupAndRestoreClassEnv.java
index e4c0625e7c5..f7b4fdc4819 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/tests/util/TestRuleSetupAndRestoreClassEnv.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/tests/util/TestRuleSetupAndRestoreClassEnv.java
@@ -31,6 +31,7 @@ import com.carrotsearch.randomizedtesting.RandomizedContext;
import com.carrotsearch.randomizedtesting.generators.RandomPicks;
import java.io.PrintStream;
import java.util.Arrays;
+import java.util.EnumSet;
import java.util.HashSet;
import java.util.Locale;
import java.util.Random;
@@ -51,6 +52,7 @@ import org.apache.lucene.tests.index.RandomCodec;
import org.apache.lucene.tests.search.similarities.AssertingSimilarity;
import org.apache.lucene.tests.search.similarities.RandomSimilarity;
import org.apache.lucene.tests.util.LuceneTestCase.LiveIWCFlushMode;
+import org.apache.lucene.tests.util.LuceneTestCase.SuppressAssertingFormats;
import org.apache.lucene.tests.util.LuceneTestCase.SuppressCodecs;
import org.apache.lucene.util.InfoStream;
import org.apache.lucene.util.PrintStreamInfoStream;
@@ -76,6 +78,11 @@ final class TestRuleSetupAndRestoreClassEnv extends AbstractBeforeAfterRule {
*/
HashSet<String> avoidCodecs;
+ /**
+ * @see SuppressAssertingFormats
+ */
+ EnumSet<AssertingCodec.Format> avoidAssertingFormats;
+
static class ThreadNameFixingPrintStreamInfoStream extends PrintStreamInfoStream {
public ThreadNameFixingPrintStreamInfoStream(PrintStream out) {
super(out);
@@ -127,6 +134,13 @@ final class TestRuleSetupAndRestoreClassEnv extends AbstractBeforeAfterRule {
avoidCodecs.addAll(Arrays.asList(a.value()));
}
+ avoidAssertingFormats = EnumSet.noneOf(AssertingCodec.Format.class);
+ if (targetClass.isAnnotationPresent(SuppressAssertingFormats.class)) {
+ SuppressAssertingFormats a = targetClass.getAnnotation(SuppressAssertingFormats.class);
+ avoidAssertingFormats.addAll(Arrays.asList(a.value()));
+ }
+ AssertingCodec.setSuppressedFormats(avoidAssertingFormats);
+
savedCodec = Codec.getDefault();
int randomVal = random.nextInt(11);
if ("default".equals(TEST_CODEC)) {