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();