hangc0276 commented on code in PR #3205:
URL: https://github.com/apache/bookkeeper/pull/3205#discussion_r851852186


##########
bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/CompactionTest.java:
##########
@@ -332,6 +332,95 @@ public void checkpointComplete(Checkpoint checkPoint, 
boolean compact)
         });
     }
 
+    @Test
+    public void testForceGarbageCollectionWhenDiskIsFull() throws Exception {
+        testForceGarbageCollectionWhenDiskIsFull(true);
+        testForceGarbageCollectionWhenDiskIsFull(false);
+    }
+
+    public void testForceGarbageCollectionWhenDiskIsFull(boolean 
isForceCompactionAllowWhenDisableCompaction)
+        throws Exception {
+
+        restartBookies(conf -> {
+            if (isForceCompactionAllowWhenDisableCompaction) {
+                conf.setMinorCompactionInterval(0);
+                conf.setMajorCompactionInterval(0);
+                conf.setForceAllowCompaction(true);
+                conf.setMajorCompactionThreshold(0.5f);
+                conf.setMinorCompactionThreshold(0.2f);
+            } else {
+                conf.setMinorCompactionInterval(120000);
+                conf.setMajorCompactionInterval(240000);
+            }
+            return conf;
+        });
+
+        getGCThread().suspendMajorGC();
+        getGCThread().suspendMinorGC();
+        long majorCompactionCntBeforeGC = 0;
+        long minorCompactionCntBeforeGC = 0;
+        long majorCompactionCntAfterGC = 0;
+        long minorCompactionCntAfterGC = 0;
+
+        // disable forceMajor and forceMinor
+        majorCompactionCntBeforeGC = 
getGCThread().getGarbageCollectionStatus().getMajorCompactionCounter();
+        minorCompactionCntBeforeGC = 
getGCThread().getGarbageCollectionStatus().getMinorCompactionCounter();
+        getGCThread().triggerGC(true, true, true).get();
+        majorCompactionCntAfterGC = 
getGCThread().getGarbageCollectionStatus().getMajorCompactionCounter();
+        minorCompactionCntAfterGC = 
getGCThread().getGarbageCollectionStatus().getMinorCompactionCounter();
+        if (isForceCompactionAllowWhenDisableCompaction) {

Review Comment:
   Whether we will enter major or minor compaction is controlled by 
   ```
   ((isForceMajorCompactionAllow && force) || (enableMajorCompaction
                       && (force || curTime - lastMajorCompactionTime > 
majorCompactionInterval)))
                       && (!suspendMajor)
   ```
   That is:
   1. `isForceMajorCompactionAllow && force` or `(enableMajorCompaction && 
(force || curTime - lastMajorCompactionTime > majorCompactionInterval)`
   2. suspendMajor
   
   We must meet above both conditions.
   
   The if and else is different code path controlled by 
`isForceMajorCompactionAllow && force` and `(enableMajorCompaction && (force || 
curTime - lastMajorCompactionTime > majorCompactionInterval)`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to