Author: amitj
Date: Thu Jun 21 05:46:07 2018
New Revision: 1833977
URL: http://svn.apache.org/viewvc?rev=1833977&view=rev
Log:
OAK-7555: Enable collection of simple operation stats for Revision garbage
collection
Added simple counters
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStats.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStatsCollector.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/RevisionGCStatsTest.java
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStats.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStats.java?rev=1833977&r1=1833976&r2=1833977&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStats.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStats.java
Thu Jun 21 05:46:07 2018
@@ -22,6 +22,7 @@ import javax.management.openmbean.Compos
import org.apache.jackrabbit.api.stats.TimeSeries;
import
org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.VersionGCStats;
+import org.apache.jackrabbit.oak.stats.CounterStats;
import org.apache.jackrabbit.oak.stats.MeterStats;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
import org.apache.jackrabbit.oak.stats.TimerStats;
@@ -52,6 +53,9 @@ class RevisionGCStats implements Revisio
static final String DELETE_DOC_TIMER = "DELETE_DOC_TIMER";
static final String DELETE_SPLIT_DOC_TIMER = "DELETE_SPLIT_DOC_TIMER";
+ static final String COUNTER = "COUNTER";
+ static final String FAILURE_COUNTER = "FAILURE";
+
private final StatisticsProvider provider;
private final MeterStats readDoc;
@@ -69,6 +73,9 @@ class RevisionGCStats implements Revisio
private final TimerStats deletedDocTimer;
private final TimerStats deletedSplitDocTimer;
+ private final CounterStats counter;
+ private final CounterStats failureCounter;
+
RevisionGCStats(StatisticsProvider provider) {
this.provider = provider;
@@ -86,6 +93,9 @@ class RevisionGCStats implements Revisio
resetDeletedFlagTimer = timer(provider, RESET_DELETED_FLAG_TIMER);
deletedDocTimer = timer(provider, DELETE_DOC_TIMER);
deletedSplitDocTimer = timer(provider, DELETE_SPLIT_DOC_TIMER);
+
+ counter = counter(provider, COUNTER);
+ failureCounter = counter(provider, FAILURE_COUNTER);
}
//---------------------< RevisionGCStatsCollector
>-------------------------
@@ -125,6 +135,11 @@ class RevisionGCStats implements Revisio
}
@Override
+ public void started() {
+ counter.inc();
+ }
+
+ @Override
public void finished(VersionGCStats stats) {
activeTimer.update(stats.active.elapsed(MICROSECONDS), MICROSECONDS);
readDocTimer.update(stats.collectDeletedDocsElapsed, MICROSECONDS);
@@ -133,6 +148,9 @@ class RevisionGCStats implements Revisio
deletedSplitDocTimer.update(stats.collectAndDeleteSplitDocsElapsed,
MICROSECONDS);
sortIdsTimer.update(stats.sortDocIdsElapsed, MICROSECONDS);
resetDeletedFlagTimer.update(stats.updateResurrectedDocumentsElapsed,
MICROSECONDS);
+ if (!stats.success) {
+ failureCounter.inc();
+ }
}
@@ -217,6 +235,11 @@ class RevisionGCStats implements Revisio
return provider.getTimer(qualifiedName(name), METRICS_ONLY);
}
+ private static CounterStats counter(StatisticsProvider provider,
+ String name) {
+ return provider.getCounterStats(qualifiedName(name), METRICS_ONLY);
+ }
+
private static String qualifiedName(String metricName) {
return RGC + "." + metricName;
}
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStatsCollector.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStatsCollector.java?rev=1833977&r1=1833976&r2=1833977&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStatsCollector.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStatsCollector.java
Thu Jun 21 05:46:07 2018
@@ -38,5 +38,7 @@ public interface RevisionGCStatsCollecto
void deletedOnceFlagReset();
+ void started();
+
void finished(VersionGCStats stats);
-}
\ No newline at end of file
+}
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=1833977&r1=1833976&r2=1833977&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
Thu Jun 21 05:46:07 2018
@@ -135,6 +135,8 @@ public class VersionGarbageCollector {
if (collector.compareAndSet(null, job)) {
VersionGCStats overall = new VersionGCStats();
overall.active.start();
+ gcStats.started();
+ boolean success = false;
try {
long averageDurationMs = 0;
while (maxRunTime.contains(nodeStore.getClock().getTime() +
averageDurationMs)) {
@@ -152,11 +154,13 @@ public class VersionGarbageCollector {
averageDurationMs = ((averageDurationMs *
(overall.iterationCount - 1))
+ stats.active.elapsed(TimeUnit.MILLISECONDS)) /
overall.iterationCount;
}
- gcStats.finished(overall);
+ success = true;
return overall;
} finally {
overall.active.stop();
collector.set(null);
+ overall.success = success;
+ gcStats.finished(overall);
if (overall.iterationCount > 1) {
gcMonitor.info("Revision garbage collection finished after
{} iterations - aggregate statistics: {}",
overall.iterationCount, overall);
@@ -243,6 +247,7 @@ public class VersionGarbageCollector {
public static class VersionGCStats {
boolean ignoredGCDueToCheckPoint;
boolean canceled;
+ boolean success = true;
boolean limitExceeded;
boolean needRepeat;
int iterationCount;
@@ -312,6 +317,7 @@ public class VersionGarbageCollector {
++iterationCount;
this.ignoredGCDueToCheckPoint = run.ignoredGCDueToCheckPoint;
this.canceled = run.canceled;
+ this.success = run.success;
this.limitExceeded = run.limitExceeded;
this.needRepeat = run.needRepeat;
this.deletedDocGCCount += run.deletedDocGCCount;
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStatsTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStatsTest.java?rev=1833977&r1=1833976&r2=1833977&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStatsTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionGCStatsTest.java
Thu Jun 21 05:46:07 2018
@@ -20,6 +20,7 @@ package org.apache.jackrabbit.oak.plugin
import java.util.concurrent.ScheduledExecutorService;
+import com.codahale.metrics.Counter;
import com.codahale.metrics.Meter;
import com.codahale.metrics.Timer;
@@ -130,6 +131,24 @@ public class RevisionGCStatsTest {
assertTimer(13, RevisionGCStats.RESET_DELETED_FLAG_TIMER);
}
+ @Test
+ public void counters() {
+ Counter counter = getCounter(RevisionGCStats.COUNTER);
+ Counter failureCounter = getCounter(RevisionGCStats.FAILURE_COUNTER);
+
+ VersionGCStats vgcs = new VersionGCStats();
+ stats.started();
+ stats.finished(vgcs);
+ assertEquals(1, counter.getCount());
+ assertEquals(0, failureCounter.getCount());
+
+ vgcs.success = false;
+ stats.started();
+ stats.finished(vgcs);
+ assertEquals(2, counter.getCount());
+ assertEquals(1, failureCounter.getCount());
+ }
+
private void assertTimer(long expected, String name) {
assertEquals(expected,
NANOSECONDS.toMillis(getTimer(name).getSnapshot().getMax()));
}
@@ -141,4 +160,9 @@ public class RevisionGCStatsTest {
private Meter getMeter(String name) {
return statsProvider.getRegistry().getMeters().get(RGC + "." + name);
}
+
+ private Counter getCounter(String name) {
+ return statsProvider.getRegistry().getCounters().get(RGC + "." + name);
+ }
+
}