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);
+    }
+
 }


Reply via email to