This is an automated email from the ASF dual-hosted git repository. daim pushed a commit to branch OAK-11864 in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit 277f2c5a208c462eaf3608c683b356f93576bfd7 Author: rishabhdaim <[email protected]> AuthorDate: Tue Aug 19 11:39:06 2025 +0530 OAK-11864 : added new ALL_ORPHANS FullGC mode for deleting only ALL_ORPHANS node i.e. without any Empty Props --- .../oak/plugins/document/FullGCMode.java | 6 +++ .../plugins/document/VersionGarbageCollector.java | 3 +- .../oak/plugins/document/BranchCommitGCTest.java | 41 +++++++++------ .../oak/plugins/document/FullGCHelper.java | 1 + .../oak/plugins/document/VersionGCTest.java | 10 ++++ .../document/VersionGarbageCollectorIT.java | 58 ++++++++++++++++++++++ 6 files changed, 104 insertions(+), 15 deletions(-) diff --git a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/FullGCMode.java b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/FullGCMode.java index aef5957a18..adfb2c8671 100644 --- a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/FullGCMode.java +++ b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/FullGCMode.java @@ -44,6 +44,10 @@ public enum FullGCMode { * GC orphaned nodes with gaps in ancestor docs, plus empty properties */ GAP_ORPHANS_EMPTYPROPS, + /** + * GC any kind of orphaned nodes + */ + ALL_ORPHANS, /** * GC any kind of orphaned nodes, plus empty properties */ @@ -98,6 +102,8 @@ public enum FullGCMode { return ORPHANS_EMPTYPROPS_BETWEEN_CHECKPOINTS_NO_UNMERGED_BC; case 9: return ORPHANS_EMPTYPROPS_BETWEEN_CHECKPOINTS_WITH_UNMERGED_BC; + case 10: + return ALL_ORPHANS; default: log.warn("Unsupported full GC mode configuration value: {}. Resetting to NONE", mode); return NONE; diff --git a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java index d469ebba0c..195fc670eb 100644 --- a/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java +++ b/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java @@ -1280,7 +1280,8 @@ public class VersionGarbageCollector { // shouldn't be reached return; } - case GAP_ORPHANS : { + case GAP_ORPHANS : + case ALL_ORPHANS: { // this mode does neither unusedproprev, nor unmergedBC break; } 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 915d6d83e6..6cee643e5d 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 @@ -22,6 +22,7 @@ import static org.apache.commons.lang3.reflect.FieldUtils.writeStaticField; import static org.apache.jackrabbit.oak.plugins.document.FullGCHelper.assertBranchRevisionRemovedFromAllDocuments; import static org.apache.jackrabbit.oak.plugins.document.FullGCHelper.build; import static org.apache.jackrabbit.oak.plugins.document.FullGCHelper.gc; +import static org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollectorIT.allOrphOnly; import static org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollectorIT.allOrphProp; import static org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollectorIT.assertStatsCountsEqual; import static org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollectorIT.assertStatsCountsZero; @@ -42,7 +43,6 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; -import java.io.IOException; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -78,7 +78,7 @@ public class BranchCommitGCTest { private VersionGarbageCollector.VersionGCStats stats; @Parameterized.Parameters(name="{index}: {0} with {1}") - public static java.util.Collection<Object[]> params() throws IOException { + public static java.util.Collection<Object[]> params() { java.util.Collection<Object[]> params = new LinkedList<>(); for (Object[] fixture : AbstractDocumentStoreTest.fixtures()) { DocumentStoreFixture f = (DocumentStoreFixture)fixture[0]; @@ -151,6 +151,7 @@ public class BranchCommitGCTest { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(2, 0, 0, 0, 0, 0, 2), allOrphProp(2, 0, 0, 0, 0, 0, 2), keepOneFull(2, 0, 1, 0, 1, 0, 3), keepOneUser(2, 0, 0, 0, 0, 0, 2), @@ -215,6 +216,7 @@ public class BranchCommitGCTest { gapOrphOnly(2, 0, 0, 0, 0, 0, 0), empPropOnly(2, 0, 0, 0, 0, 0, 0), gapOrphProp(2, 0, 0, 0, 0, 0, 0), + allOrphOnly(2, 0, 0, 0, 0, 0, 0), allOrphProp(2, 0, 0, 0, 0, 0, 0), keepOneFull(2, 0, 1, 0, 2, 0, 1), keepOneUser(2, 0, 0, 0, 0, 0, 0), @@ -229,6 +231,7 @@ public class BranchCommitGCTest { gapOrphOnly(2, 0, 0, 0, 0, 0, 0), empPropOnly(2, 0, 0, 0, 0, 0, 0), gapOrphProp(2, 0, 0, 0, 0, 0, 0), + allOrphOnly(2, 0, 0, 0, 0, 0, 0), allOrphProp(2, 0, 0, 0, 0, 0, 0), keepOneFull(2, 1, 0, 0, 0, 0, 0), keepOneUser(2, 1, 0, 0, 0, 0, 0), @@ -293,6 +296,7 @@ public class BranchCommitGCTest { // 6 deleted props: 0:/[_collisions], 1:/foo[p, a], 1:/bar[_bc,prop,_revisions] assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 3, 0, 0, 0, 0, 2), gapOrphProp(0, 3, 0, 0, 0, 0, 2), allOrphProp(0, 3, 0, 0, 0, 0, 2), @@ -337,6 +341,7 @@ public class BranchCommitGCTest { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(2, 0, 0, 0, 0, 0, 2), allOrphProp(2, 0, 0, 0, 0, 0, 2), keepOneFull(2, 0, 2, 0, 2, 0, 3), keepOneUser(2, 0, 0, 0, 0, 0, 2), @@ -394,6 +399,7 @@ public class BranchCommitGCTest { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 1, 4,12, 0, 3), keepOneUser(0, 0, 0, 4, 0, 0, 2), @@ -457,10 +463,11 @@ public class BranchCommitGCTest { VersionGarbageCollector.VersionGCStats stats = gc(gc, 1, HOURS); assertStatsCountsEqual(stats, - empPropOnly(0, 0, 0, 0, 0, 0, 0), - gapOrphOnly(0, 0, 0, 0, 0, 0, 0), - gapOrphProp(0, 0, 0, 0, 0, 0, 0), - allOrphProp(0, 0, 0, 0, 0, 0, 0), + empPropOnly(), + gapOrphOnly(), + gapOrphProp(), + allOrphOnly(), + allOrphProp(), keepOneFull(0, 0, 1, 8,24, 0, 3), keepOneUser(0, 0, 0, 8, 0, 0, 2), betweenChkp(), @@ -503,6 +510,7 @@ public class BranchCommitGCTest { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(1, 0, 0, 0, 0, 0, 1), allOrphProp(1, 0, 0, 0, 0, 0, 1), keepOneFull(1, 0, 0, 1, 6, 0, 4), keepOneUser(1, 0, 0, 1, 0, 0, 2), @@ -542,6 +550,7 @@ public class BranchCommitGCTest { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 0, 1, 4, 0, 2), keepOneUser(0, 0, 0, 1, 0, 0, 1), @@ -567,6 +576,7 @@ public class BranchCommitGCTest { // 1 deleted prop: 1:/foo[a] assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 1, 0, 0, 0, 0, 1), gapOrphProp(0, 1, 0, 0, 0, 0, 1), allOrphProp(0, 1, 0, 0, 0, 0, 1), @@ -610,10 +620,11 @@ public class BranchCommitGCTest { stats = gc(gc, 1, HOURS); assertStatsCountsEqual(stats, - gapOrphOnly(0, 0, 0, 0, 0, 0, 0), - empPropOnly(0, 0, 0, 0, 0, 0, 0), - gapOrphProp(0, 0, 0, 0, 0, 0, 0), - allOrphProp(0, 0, 0, 0, 0, 0, 0), + gapOrphOnly(), + empPropOnly(), + gapOrphProp(), + allOrphOnly(), + allOrphProp(), keepOneFull(0, 0, 1,10,40, 0, 2), keepOneUser(0, 0, 0,10, 0, 0, 1), betweenChkp(), @@ -660,10 +671,11 @@ public class BranchCommitGCTest { stats = gc(gc, 1, HOURS); assertStatsCountsEqual(stats, - gapOrphOnly(0, 0, 0, 0, 0, 0, 0), - empPropOnly(0, 0, 0, 0, 0, 0, 0), - gapOrphProp(0, 0, 0, 0, 0, 0, 0), - allOrphProp(0, 0, 0, 0, 0, 0, 0), + gapOrphOnly(), + empPropOnly(), + gapOrphProp(), + allOrphOnly(), + allOrphProp(), keepOneFull(0, 0, 2,10,30, 0, 2), keepOneUser(0, 0, 0,10, 0, 0, 1), betweenChkp(), @@ -721,6 +733,7 @@ public class BranchCommitGCTest { // deleted properties are 0:/ -> rootProp, _collisions & 1:/foo -> a assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 2, 0, 0, 0, 0, 2), gapOrphProp(0, 2, 0, 0, 0, 0, 2), allOrphProp(0, 2, 0, 0, 0, 0, 2), diff --git a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/FullGCHelper.java b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/FullGCHelper.java index e87e6e2c1a..1d813a4714 100644 --- a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/FullGCHelper.java +++ b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/FullGCHelper.java @@ -89,6 +89,7 @@ public class FullGCHelper { if (VersionGarbageCollector.getFullGcMode() == FullGCMode.GAP_ORPHANS || VersionGarbageCollector.getFullGcMode() == FullGCMode.EMPTYPROPS || VersionGarbageCollector.getFullGcMode() == FullGCMode.GAP_ORPHANS_EMPTYPROPS + || VersionGarbageCollector.getFullGcMode() == FullGCMode.ALL_ORPHANS || VersionGarbageCollector.getFullGcMode() == FullGCMode.ALL_ORPHANS_EMPTYPROPS || VersionGarbageCollector.getFullGcMode() == FullGCMode.ORPHANS_EMPTYPROPS_BETWEEN_CHECKPOINTS_NO_UNMERGED_BC) { // then we must skip these asserts, as we cannot guarantee diff --git a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCTest.java b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCTest.java index 5876e78177..0751ddcfe8 100644 --- a/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCTest.java +++ b/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCTest.java @@ -726,6 +726,16 @@ public class VersionGCTest { // OAK-10896 END + @Test + public void testVersionGCLoadGCModeConfigurationAllOrphans() { + int fullGcModeAllOrphansEmptyProperties = 10; + VersionGarbageCollector gc = new VersionGarbageCollector( + ns, new VersionGCSupport(store), true, false, false, + fullGcModeAllOrphansEmptyProperties, 0, DEFAULT_FGC_BATCH_SIZE, DEFAULT_FGC_PROGRESS_SIZE, TimeUnit.SECONDS.toMillis(DEFAULT_FULL_GC_MAX_AGE), 0); + + assertEquals(FullGCMode.ALL_ORPHANS, VersionGarbageCollector.getFullGcMode()); + } + // OAK-11439 @Test 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 29e8209445..18247c20f8 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 @@ -490,6 +490,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(0, (int)batchSize, 0, 0, 0, 0, (int)batchSize), gapOrphProp(0, (int)batchSize, 0, 0, 0, 0, (int)batchSize), + allOrphOnly(0, (int)batchSize, 0, 0, 0, 0, (int)batchSize), allOrphProp(0, (int)batchSize, 0, 0, 0, 0, (int)batchSize), keepOneFull(0, (int)batchSize, 0, 0, 0, 0, (int)batchSize), keepOneUser(0, (int)batchSize, 0, 0, 0, 0, (int)batchSize), @@ -567,6 +568,7 @@ public class VersionGarbageCollectorIT { VersionGCStats stats = gc(gc, delta, MILLISECONDS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 1, 0, 0, 0, 0, 1), gapOrphProp(0, 1, 0, 0, 0, 0, 1), allOrphProp(0, 1, 0, 0, 0, 0, 1), @@ -674,6 +676,7 @@ public class VersionGarbageCollectorIT { VersionGCStats stats = gc(gc, maxAge, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, deletedPropsCount, 0, 0, 0, 0, updatedDocsCount), gapOrphProp(0, deletedPropsCount, 0, 0, 0, 0, updatedDocsCount), allOrphProp(0, deletedPropsCount, 0, 0, 0, 0, updatedDocsCount), @@ -763,6 +766,7 @@ public class VersionGarbageCollectorIT { stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 1, 0, 0, 0, 0, 1), gapOrphProp(0, 1, 0, 0, 0, 0, 1), allOrphProp(0, 1, 0, 0, 0, 0, 1), @@ -789,6 +793,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 0, 2, 0, 0, 1), keepOneUser(0, 0, 0, 2, 0, 0, 1), @@ -833,6 +838,7 @@ public class VersionGarbageCollectorIT { VersionGCStats stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 50_000, 0, 0, 0, 0, 5_000), gapOrphProp(0, 50_000, 0, 0, 0, 0, 5_000), allOrphProp(0, 50_000, 0, 0, 0, 0, 5_000), @@ -884,6 +890,7 @@ public class VersionGarbageCollectorIT { VersionGCStats stats = gc(gc, maxAge, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 50_000, 0, 0, 0, 0, 5_000), gapOrphProp(0, 50_000, 0, 0, 0, 0, 5_000), allOrphProp(0, 50_000, 0, 0, 0, 0, 5_000), @@ -970,6 +977,7 @@ public class VersionGarbageCollectorIT { stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 10, 0, 0, 0, 0, 10), gapOrphProp(0, 10, 0, 0, 0, 0, 10), allOrphProp(0, 10, 0, 0, 0, 0, 10), @@ -1003,6 +1011,7 @@ public class VersionGarbageCollectorIT { stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 10, 0, 0, 0, 0, 10), gapOrphProp(0, 10, 0, 0, 0, 0, 10), allOrphProp(0, 10, 0, 0, 0, 0, 10), @@ -1099,6 +1108,7 @@ public class VersionGarbageCollectorIT { VersionGCStats stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 10, 0, 0, 0, 0, 10), gapOrphProp(0, 10, 0, 0, 0, 0, 10), allOrphProp(0, 10, 0, 0, 0, 0, 10), @@ -1151,6 +1161,7 @@ public class VersionGarbageCollectorIT { stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 10, 0, 0, 0, 0, 1), gapOrphProp(0, 10, 0, 0, 0, 0, 1), allOrphProp(0, 10, 0, 0, 0, 0, 1), @@ -1171,6 +1182,7 @@ public class VersionGarbageCollectorIT { stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(), gapOrphProp(), allOrphProp(), @@ -1224,6 +1236,7 @@ public class VersionGarbageCollectorIT { stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 10, 0, 0, 0, 0, 1), gapOrphProp(0, 10, 0, 0, 0, 0, 1), allOrphProp(0, 10, 0, 0, 0, 0, 1), @@ -1244,6 +1257,7 @@ public class VersionGarbageCollectorIT { stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(), gapOrphProp(), allOrphProp(), @@ -1306,6 +1320,7 @@ public class VersionGarbageCollectorIT { stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 10, 0, 0, 0, 0, 1), gapOrphProp(0, 10, 0, 0, 0, 0, 1), allOrphProp(0, 10, 0, 0, 0, 0, 1), @@ -1396,6 +1411,7 @@ public class VersionGarbageCollectorIT { stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 10, 0, 0, 0, 0, 1), gapOrphProp(0, 10, 0, 0, 0, 0, 1), allOrphProp(0, 10, 0, 0, 0, 0, 1), @@ -1473,6 +1489,7 @@ public class VersionGarbageCollectorIT { empPropOnly(), gapOrphOnly(2, 0, 0, 0, 0, 0, 2), gapOrphProp(2, 0, 0, 0, 0, 0, 2), + allOrphOnly(2, 0, 0, 0, 0, 0, 2), allOrphProp(2, 0, 0, 0, 0, 0, 2), keepOneFull(2, 0, 0, 0, 0, 0, 2), keepOneUser(2, 0, 0, 0, 0, 0, 2), @@ -1540,6 +1557,7 @@ public class VersionGarbageCollectorIT { new GCCounts(FullGCMode.NONE, 2, 0,0,0,0,0,0), empPropOnly(2, 13, 0, 0, 0, 0, 1), gapOrphOnly(2, 0, 0, 0, 0, 0, 0), + allOrphOnly(2, 0, 0, 0, 0, 0, 0), gapOrphProp(2, 13, 0, 0, 0, 0, 1), allOrphProp(2, 13, 0, 0, 0, 0, 1), keepOneFull(2, 13, 0, 0, 0, 0, 1), @@ -1875,6 +1893,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 0, 3, 0, 0, 2), keepOneUser(0, 0, 0, 3, 0, 0, 2), @@ -1915,6 +1934,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 0, 1, 0, 0, 1), keepOneUser(0, 0, 0, 1, 0, 0, 1), @@ -2031,6 +2051,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 1, 0, 1, 0, 1), keepOneUser(), @@ -2078,6 +2099,7 @@ public class VersionGarbageCollectorIT { assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 3, 0, 0, 0, 0, 2), gapOrphProp(0, 3, 0, 0, 0, 0, 2), allOrphProp(0, 3, 0, 0, 0, 0, 2), @@ -2128,6 +2150,7 @@ public class VersionGarbageCollectorIT { VersionGCStats stats = gc(gc, 1, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 3, 0, 0, 0, 0, 2), gapOrphProp(0, 3, 0, 0, 0, 0, 2), allOrphProp(0, 3, 0, 0, 0, 0, 2), @@ -2164,6 +2187,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(1, 0, 0, 0, 0, 0, 1), allOrphProp(1, 0, 0, 0, 0, 0, 1), keepOneFull(1, 0, 0, 0, 0, 0, 1), keepOneUser(1, 0, 0, 0, 0, 0, 1), @@ -2182,6 +2206,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(3, 0, 0, 0, 0, 0, 3), allOrphProp(3, 0, 0, 0, 0, 0, 3), keepOneFull(3, 0, 0, 0, 0, 0, 3), keepOneUser(3, 0, 0, 0, 0, 0, 3), @@ -2202,6 +2227,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(2, 0, 0, 0, 0, 0, 2), allOrphProp(2, 0, 0, 0, 0, 0, 2), keepOneFull(2, 0, 0, 0, 0, 0, 2), keepOneUser(2, 0, 0, 0, 0, 0, 2), @@ -2233,6 +2259,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(expectedNumOrphanedDocs, 0, 0, 0, 0, 0, expectedNumOrphanedDocs), allOrphProp(expectedNumOrphanedDocs, 0, 0, 0, 0, 0, expectedNumOrphanedDocs), keepOneFull(expectedNumOrphanedDocs, 0, 0, 0, 0, 0, expectedNumOrphanedDocs), keepOneUser(expectedNumOrphanedDocs, 0, 0, 0, 0, 0, expectedNumOrphanedDocs), @@ -2264,6 +2291,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 0, 3, 3, 0, 3), keepOneUser(0, 0, 0, 3, 0, 0, 3), @@ -2336,6 +2364,7 @@ public class VersionGarbageCollectorIT { empPropOnly(), gapOrphOnly(2, 0, 0, 0, 0, 0, 2), gapOrphProp(2, 0, 0, 0, 0, 0, 2), + allOrphOnly(2, 0, 0, 0, 0, 0, 2), allOrphProp(2, 0, 0, 0, 0, 0, 2), keepOneFull(2, 0, 0, 0, 0, 0, 2), keepOneUser(2, 0, 0, 0, 0, 0, 2), @@ -2406,6 +2435,7 @@ public class VersionGarbageCollectorIT { // this might help us narrow down differences in the modes assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 2, 0, 0, 0, 0, 1), gapOrphProp(0, 2, 0, 0, 0, 0, 1), allOrphProp(0, 2, 0, 0, 0, 0, 1), @@ -2470,6 +2500,24 @@ public class VersionGarbageCollectorIT { updatedFullGCDocsCount); } + static GCCounts allOrphOnly() { + return new GCCounts(FullGCMode.ALL_ORPHANS); + } + + static GCCounts allOrphOnly(int deletedDocGCCount, int deletedPropsCount, + int deletedInternalPropsCount, int deletedPropRevsCount, + int deletedInternalPropRevsCount, int deletedUnmergedBCCount, + int updatedFullGCDocsCount) { + assertEquals(0, deletedInternalPropsCount); + assertEquals(0, deletedPropRevsCount); + assertEquals(0, deletedInternalPropRevsCount); + assertEquals(0, deletedUnmergedBCCount); + return new GCCounts(FullGCMode.ALL_ORPHANS, deletedDocGCCount, + deletedPropsCount, deletedInternalPropsCount, deletedPropRevsCount, + deletedInternalPropRevsCount, deletedUnmergedBCCount, + updatedFullGCDocsCount); + } + static GCCounts allOrphProp() { return new GCCounts(FullGCMode.ALL_ORPHANS_EMPTYPROPS); } @@ -2607,6 +2655,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 0, 11, 0, 0, 1), keepOneUser(0, 0, 0, 11, 0, 0, 1), @@ -2673,6 +2722,7 @@ public class VersionGarbageCollectorIT { VersionGCStats stats = gc(gc, maxAge*2, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 1, 0, 0, 0, 0, 1), gapOrphProp(0, 1, 0, 0, 0, 0, 1), allOrphProp(0, 1, 0, 0, 0, 0, 1), @@ -2708,6 +2758,7 @@ public class VersionGarbageCollectorIT { assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 1, 0, 0, 0, 0, 1), gapOrphProp(0, 1, 0, 0, 0, 0, 1), allOrphProp(0, 1, 0, 0, 0, 0, 1), @@ -2765,6 +2816,7 @@ public class VersionGarbageCollectorIT { VersionGCStats stats = gc(gc, 1, HOURS); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 3, 0, 0, 0, 0, 2), gapOrphProp(0, 3, 0, 0, 0, 0, 2), allOrphProp(0, 3, 0, 0, 0, 0, 2), @@ -2816,6 +2868,7 @@ public class VersionGarbageCollectorIT { assertNotNull(stats); assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 1, 0, 0, 0, 0, 1), gapOrphProp(0, 1, 0, 0, 0, 0, 1), allOrphProp(0, 1, 0, 0, 0, 0, 1), @@ -2862,6 +2915,7 @@ public class VersionGarbageCollectorIT { // thus it will be collected. assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 1, 0, 0, 0, 0, 1), gapOrphProp(0, 1, 0, 0, 0, 0, 1), allOrphProp(0, 1, 0, 0, 0, 0, 1), @@ -2912,6 +2966,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 0, 2, 0, 0, 1), keepOneUser(0, 0, 0, 2, 0, 0, 1), @@ -2949,6 +3004,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 0, 1, 0, 0, 1), keepOneUser(0, 0, 0, 1, 0, 0, 1), @@ -2988,6 +3044,7 @@ public class VersionGarbageCollectorIT { gapOrphOnly(), empPropOnly(), gapOrphProp(), + allOrphOnly(), allOrphProp(), keepOneFull(0, 0, 0, 1, 0, 0, 1), keepOneUser(0, 0, 0, 1, 0, 0, 1), @@ -3049,6 +3106,7 @@ public class VersionGarbageCollectorIT { // of common ancestor and this would make late write visible assertStatsCountsEqual(stats, gapOrphOnly(), + allOrphOnly(), empPropOnly(0, 1, 0, 0, 0, 0, 1), gapOrphProp(0, 1, 0, 0, 0, 0, 1), allOrphProp(0, 1, 0, 0, 0, 0, 1),
