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),

Reply via email to