Author: reschke
Date: Wed Jul  3 17:22:44 2019
New Revision: 1862499

URL: http://svn.apache.org/viewvc?rev=1862499&view=rev
Log:
OAK-8453: Refactor VersionGarbageCollector to extract Recommendations class - 
further reduce dependencies on VersionGarbageCollector

Modified:
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGCRecommendations.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java
    
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCTest.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGCRecommendations.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGCRecommendations.java?rev=1862499&r1=1862498&r2=1862499&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGCRecommendations.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGCRecommendations.java
 Wed Jul  3 17:22:44 2019
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.util.TimeInterval;
 import org.apache.jackrabbit.oak.plugins.document.util.Utils;
 import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
+import org.apache.jackrabbit.oak.stats.Clock;
 
 import com.google.common.collect.Maps;
 
@@ -62,17 +63,18 @@ public class VersionGCRecommendations {
      * It also updates the time interval recommended for the next run.
      *
      * @param maxRevisionAgeMs the minimum age for revisions to be collected
-     * @param dns DocumentNodeStore to use
+     * @param checkpoints checkpoints from {@link DocumentNodeStore}
+     * @param clock clock from {@link DocumentNodeStore}
      * @param vgc VersionGC support class
      * @param options options for running the gc
      * @param gcMonitor monitor class for messages
      */
-    public VersionGCRecommendations(long maxRevisionAgeMs, DocumentNodeStore 
dns, VersionGCSupport vgc,
+    public VersionGCRecommendations(long maxRevisionAgeMs, Checkpoints 
checkpoints, Clock clock, VersionGCSupport vgc,
             VersionGCOptions options, GCMonitor gcMonitor) {
         this.vgc = vgc;
         this.gcmon = gcMonitor;
 
-        TimeInterval keep = new TimeInterval(dns.getClock().getTime() - 
maxRevisionAgeMs, Long.MAX_VALUE);
+        TimeInterval keep = new TimeInterval(clock.getTime() - 
maxRevisionAgeMs, Long.MAX_VALUE);
         boolean ignoreDueToCheckPoint = false;
         long deletedOnceCount = 0;
         long suggestedIntervalMs;
@@ -83,7 +85,7 @@ public class VersionGCRecommendations {
         lastOldestTimestamp = 
settings.get(VersionGarbageCollector.SETTINGS_COLLECTION_OLDEST_TIMESTAMP_PROP);
         if (lastOldestTimestamp == 0) {
             VersionGarbageCollector.log.debug("No lastOldestTimestamp found, 
querying for the oldest deletedOnce candidate");
-            oldestPossible = vgc.getOldestDeletedOnceTimestamp(dns.getClock(), 
options.precisionMs) - 1;
+            oldestPossible = vgc.getOldestDeletedOnceTimestamp(clock, 
options.precisionMs) - 1;
             VersionGarbageCollector.log.debug("lastOldestTimestamp found: {}", 
Utils.timestampToString(oldestPossible));
         } else {
             oldestPossible = lastOldestTimestamp - 1;
@@ -127,7 +129,7 @@ public class VersionGCRecommendations {
         }
 
         //Check for any registered checkpoint which prevent the GC from running
-        Revision checkpoint = dns.getCheckpoints().getOldestRevisionToKeep();
+        Revision checkpoint = checkpoints.getOldestRevisionToKeep();
         if (checkpoint != null && scope.endsAfter(checkpoint.getTimestamp())) {
             TimeInterval minimalScope = 
scope.startAndDuration(options.precisionMs);
             if (minimalScope.endsAfter(checkpoint.getTimestamp())) {

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java?rev=1862499&r1=1862498&r2=1862499&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollector.java
 Wed Jul  3 17:22:44 2019
@@ -206,7 +206,8 @@ public class VersionGarbageCollector {
             throws IOException {
         long maxRevisionAgeInMillis = unit.toMillis(maxRevisionAge);
         long now = nodeStore.getClock().getTime();
-        VersionGCRecommendations rec = new 
VersionGCRecommendations(maxRevisionAgeInMillis, nodeStore, versionStore, 
options, gcMonitor);
+        VersionGCRecommendations rec = new 
VersionGCRecommendations(maxRevisionAgeInMillis, nodeStore.getCheckpoints(),
+                nodeStore.getClock(), versionStore, options, gcMonitor);
         int estimatedIterations = -1;
         if (rec.suggestedIntervalMs > 0) {
             estimatedIterations = (int)Math.ceil(
@@ -490,7 +491,8 @@ public class VersionGarbageCollector {
         private VersionGCStats gc(long maxRevisionAgeInMillis) throws 
IOException {
             VersionGCStats stats = new VersionGCStats();
             stats.active.start();
-            VersionGCRecommendations rec = new 
VersionGCRecommendations(maxRevisionAgeInMillis, nodeStore, versionStore, 
options, gcMonitor);
+            VersionGCRecommendations rec = new 
VersionGCRecommendations(maxRevisionAgeInMillis, nodeStore.getCheckpoints(),
+                    nodeStore.getClock(), versionStore, options, gcMonitor);
             GCPhases phases = new GCPhases(cancel, stats, gcMonitor);
             try {
                 if (rec.ignoreDueToCheckPoint) {

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCTest.java?rev=1862499&r1=1862498&r2=1862499&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGCTest.java
 Wed Jul  3 17:22:44 2019
@@ -245,7 +245,8 @@ public class VersionGCTest {
             }
         };
 
-        VersionGCRecommendations rec = new VersionGCRecommendations(86400L, 
ns, localgcsupport, options, new TestGCMonitor());
+        VersionGCRecommendations rec = new VersionGCRecommendations(86400L, 
ns.getCheckpoints(), ns.getClock(), localgcsupport,
+                options, new TestGCMonitor());
 
         // should select a duration of roughly one month
         long duration= rec.scope.getDurationMs();
@@ -258,7 +259,8 @@ public class VersionGCTest {
         rec.evaluate(stats);
         assertTrue(stats.needRepeat);
 
-        rec = new VersionGCRecommendations(86400L, ns, localgcsupport, 
options, new TestGCMonitor());
+        rec = new VersionGCRecommendations(86400L, ns.getCheckpoints(), 
ns.getClock(), localgcsupport, options,
+                new TestGCMonitor());
 
         // new duration should be half
         long nduration = rec.scope.getDurationMs();


Reply via email to