From 6f1bd84901befcf0e678a1048a5fc4546604c2f1 Mon Sep 17 00:00:00 2001 From: Jose Cordero Date: Mon, 17 Nov 2025 20:18:52 +0100 Subject: [PATCH 1/2] OAK-12011: add sleep to avoid backgroundPurge to interfere with tests --- .../oak/plugins/document/BranchCommitGCTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BranchCommitGCTest.java b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BranchCommitGCTest.java index 6cee643e5d1..320afd67c76 100644 --- a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BranchCommitGCTest.java +++ b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BranchCommitGCTest.java @@ -540,7 +540,13 @@ public void unmergedRemoveProperty() throws Exception { RevisionVector br = unmergedBranchCommit(b -> b.child("foo").removeProperty("a")); mergedBranchCommit(b -> b.child("foo").setProperty("c", "d")); store.runBackgroundOperations(); - + // OAK-12011 : adding a temporary sleep to reduce likelyhood of + // backgroundPurge to interfere with test + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + fail("got interrupted"); + } // wait two hours clock.waitUntil(clock.getTime() + HOURS.toMillis(2)); // clean everything older than one hour From df27cfa3044eb54e09a2f3d2c9b482cca7c79279 Mon Sep 17 00:00:00 2001 From: Jose Cordero Date: Mon, 17 Nov 2025 23:53:24 +0100 Subject: [PATCH 2/2] OAK-10844: Skip FullGC BETWEEN_CHECKPOINTS tests by default --- .../plugins/document/BranchCommitGCTest.java | 22 ++++++++++++++++++ .../document/VersionGarbageCollectorIT.java | 23 ++++++++++++++++--- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BranchCommitGCTest.java b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BranchCommitGCTest.java index 320afd67c76..22729be37bf 100644 --- a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BranchCommitGCTest.java +++ b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/BranchCommitGCTest.java @@ -70,6 +70,14 @@ @RunWith(Parameterized.class) public class BranchCommitGCTest { + /** + * System property to enable BETWEEN_CHECKPOINTS modes in tests. + * By default, these modes are disabled due to flakiness and slowness (OAK-10844). + * Set to "true" to enable: -Doak.test.enableBetweenCheckpointsModes=true + */ + private static final String ENABLE_BETWEEN_CHECKPOINTS_MODES = + "oak.test.enableBetweenCheckpointsModes"; + @Rule public DocumentMKBuilderProvider builderProvider = new DocumentMKBuilderProvider(); private Clock clock; @@ -79,13 +87,27 @@ public class BranchCommitGCTest { @Parameterized.Parameters(name="{index}: {0} with {1}") public static java.util.Collection params() { + boolean enableBetweenCheckpointsModes = Boolean.getBoolean(ENABLE_BETWEEN_CHECKPOINTS_MODES); java.util.Collection params = new LinkedList<>(); + int skippedModes = 0; for (Object[] fixture : AbstractDocumentStoreTest.fixtures()) { DocumentStoreFixture f = (DocumentStoreFixture)fixture[0]; for (FullGCMode gcType : FullGCMode.values()) { + // OAK-10844: Skip BETWEEN_CHECKPOINTS modes by default + if (!enableBetweenCheckpointsModes && + (gcType == FullGCMode.ORPHANS_EMPTYPROPS_BETWEEN_CHECKPOINTS_NO_UNMERGED_BC || + gcType == FullGCMode.ORPHANS_EMPTYPROPS_BETWEEN_CHECKPOINTS_WITH_UNMERGED_BC)) { + skippedModes++; + continue; + } params.add(new Object[] {f, gcType}); } } + if (skippedModes > 0 && !enableBetweenCheckpointsModes) { + System.out.println("BranchCommitGCTest: Skipping " + skippedModes + + " BETWEEN_CHECKPOINTS mode test combinations. " + + "To enable, set system property: -D" + ENABLE_BETWEEN_CHECKPOINTS_MODES + "=true"); + } return params; } diff --git a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java index 8950951f9e0..c8a36933683 100644 --- a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java +++ b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorIT.java @@ -144,6 +144,14 @@ @Ignore("OAK-11490") public class VersionGarbageCollectorIT { + /** + * System property to enable BETWEEN_CHECKPOINTS modes in tests. + * By default, these modes are disabled due to flakiness and slowness (OAK-10844). + * Set to "true" to enable: -Doak.test.enableBetweenCheckpointsModes=true + */ + private static final String ENABLE_BETWEEN_CHECKPOINTS_MODES = + "oak.test.enableBetweenCheckpointsModes"; + // OAK-10845 : temporary hacky exposure of test store to include its dump in error message static DocumentNodeStore staticStore; @@ -220,13 +228,17 @@ public GCCounts(FullGCMode mode, int deletedDocGCCount, int deletedPropsCount, @Parameterized.Parameters(name="{index}: {0} with {1}") public static java.util.Collection params() throws IOException { + boolean enableBetweenCheckpointsModes = Boolean.getBoolean(ENABLE_BETWEEN_CHECKPOINTS_MODES); java.util.Collection params = new LinkedList<>(); + int skippedModes = 0; for (Object[] fixture : AbstractDocumentStoreTest.fixtures()) { DocumentStoreFixture f = (DocumentStoreFixture)fixture[0]; for (FullGCMode gcType : FullGCMode.values()) { - if (gcType == FullGCMode.ORPHANS_EMPTYPROPS_BETWEEN_CHECKPOINTS_NO_UNMERGED_BC - || gcType == FullGCMode.ORPHANS_EMPTYPROPS_BETWEEN_CHECKPOINTS_WITH_UNMERGED_BC) { - // temporarily skip due to flakyness + // OAK-10844: Skip BETWEEN_CHECKPOINTS modes by default + if (!enableBetweenCheckpointsModes && + (gcType == FullGCMode.ORPHANS_EMPTYPROPS_BETWEEN_CHECKPOINTS_NO_UNMERGED_BC || + gcType == FullGCMode.ORPHANS_EMPTYPROPS_BETWEEN_CHECKPOINTS_WITH_UNMERGED_BC)) { + skippedModes++; continue; } if (f.getName().equals("Memory") || f.getName().startsWith("RDB")) { @@ -240,6 +252,11 @@ public static java.util.Collection params() throws IOException { params.add(new Object[] {f, gcType}); } } + if (skippedModes > 0 && !enableBetweenCheckpointsModes) { + System.out.println("VersionGarbageCollectorIT: Skipping " + skippedModes + + " BETWEEN_CHECKPOINTS mode test combinations. " + + "To enable, set system property: -D" + ENABLE_BETWEEN_CHECKPOINTS_MODES + "=true"); + } return params; }