Author: chetanm
Date: Wed Dec 23 06:23:09 2015
New Revision: 1721493

URL: http://svn.apache.org/viewvc?rev=1721493&view=rev
Log:
OAK-3823 - Expose the count maintained by various stats

Added:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Counting.java
      - copied, changed from r1721341, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/HistogramStats.java
Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStats.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/CounterStats.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/HistogramStats.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/MeterStats.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/SimpleStats.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/TimerStats.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStatsTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/SimpleStatsTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStats.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStats.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStats.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStats.java
 Wed Dec 23 06:23:09 2015
@@ -22,6 +22,7 @@ package org.apache.jackrabbit.oak.plugin
 import java.util.concurrent.TimeUnit;
 
 import com.codahale.metrics.Counter;
+import com.codahale.metrics.Counting;
 import com.codahale.metrics.Histogram;
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.Timer;
@@ -42,35 +43,37 @@ final class CompositeStats implements Co
     private final Timer timer;
     private final Meter meter;
     private final Histogram histogram;
+    private final Counting counting;
 
     public CompositeStats(SimpleStats delegate, Counter counter) {
-        this(delegate, counter, null, null, null);
+        this(delegate, counter, null, null, null, counter);
     }
 
     public CompositeStats(SimpleStats delegate, Timer timer) {
-        this(delegate, null, timer, null, null);
+        this(delegate, null, timer, null, null, timer);
     }
 
     public CompositeStats(SimpleStats delegate, Meter meter) {
-        this(delegate, null, null, meter, null);
+        this(delegate, null, null, meter, null, meter);
     }
 
     public CompositeStats(SimpleStats delegate, Histogram histogram) {
-        this(delegate, null, null, null, histogram);
+        this(delegate, null, null, null, histogram, histogram);
     }
 
     private CompositeStats(SimpleStats delegate, Counter counter,
-                           Timer timer, Meter meter, Histogram histogram) {
+                           Timer timer, Meter meter, Histogram histogram, 
Counting counting) {
         this.delegate = delegate;
         this.counter = counter;
         this.timer = timer;
         this.meter = meter;
         this.histogram = histogram;
+        this.counting = counting;
     }
 
     @Override
     public long getCount() {
-        return delegate.getCount();
+        return counting.getCount();
     }
 
     @Override

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProvider.java
 Wed Dec 23 06:23:09 2015
@@ -143,11 +143,11 @@ public class MetricStatisticsProvider im
         if (stats == null) {
             SimpleStats delegate;
             if (enumType != null) {
-                delegate = new SimpleStats(repoStats.getCounter(enumType));
+                delegate = new SimpleStats(repoStats.getCounter(enumType), 
builder.getType());
                 name = typeToName(enumType);
             } else {
                 boolean resetValueEachSecond = builder != 
StatsBuilder.COUNTERS;
-                delegate = new SimpleStats(repoStats.getCounter(type, 
resetValueEachSecond));
+                delegate = new SimpleStats(repoStats.getCounter(type, 
resetValueEachSecond), builder.getType());
             }
 
             if (NOOP_METRIC_TYPES.contains(name)) {
@@ -190,6 +190,11 @@ public class MetricStatisticsProvider im
             public boolean isInstance(Stats metric) {
                 return CounterStats.class.isInstance(metric);
             }
+
+            @Override
+            public SimpleStats.Type getType() {
+                return SimpleStats.Type.COUNTER;
+            }
         };
 
         StatsBuilder<MeterStats> METERS = new StatsBuilder<MeterStats>() {
@@ -204,6 +209,11 @@ public class MetricStatisticsProvider im
             public boolean isInstance(Stats metric) {
                 return MeterStats.class.isInstance(metric);
             }
+
+            @Override
+            public SimpleStats.Type getType() {
+                return SimpleStats.Type.METER;
+            }
         };
 
         StatsBuilder<TimerStats> TIMERS = new StatsBuilder<TimerStats>() {
@@ -217,6 +227,11 @@ public class MetricStatisticsProvider im
             public boolean isInstance(Stats metric) {
                 return TimerStats.class.isInstance(metric);
             }
+
+            @Override
+            public SimpleStats.Type getType() {
+                return SimpleStats.Type.TIMER;
+            }
         };
 
         StatsBuilder<HistogramStats> HISTOGRAMS = new 
StatsBuilder<HistogramStats>() {
@@ -230,11 +245,18 @@ public class MetricStatisticsProvider im
             public boolean isInstance(Stats metric) {
                 return HistogramStats.class.isInstance(metric);
             }
+
+            @Override
+            public SimpleStats.Type getType() {
+                return SimpleStats.Type.HISTOGRAM;
+            }
         };
 
         CompositeStats newComposite(SimpleStats delegate, 
MetricStatisticsProvider provider,String name);
 
         boolean isInstance(Stats stats);
+
+        SimpleStats.Type getType();
     }
 
     private static class AvgGauge extends RatioGauge {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/CounterStats.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/CounterStats.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/CounterStats.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/CounterStats.java
 Wed Dec 23 06:23:09 2015
@@ -22,14 +22,7 @@ package org.apache.jackrabbit.oak.stats;
 import aQute.bnd.annotation.ProviderType;
 
 @ProviderType
-public interface CounterStats extends Stats{
-    /**
-     * Returns the counter's current value.
-     *
-     * @return the counter's current value
-     */
-    long getCount();
-
+public interface CounterStats extends Stats, Counting{
     /**
      * Increment the counter by one.
      */

Copied: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Counting.java
 (from r1721341, 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/HistogramStats.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Counting.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Counting.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/HistogramStats.java&r1=1721341&r2=1721493&rev=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/HistogramStats.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/Counting.java
 Wed Dec 23 06:23:09 2015
@@ -19,19 +19,11 @@
 
 package org.apache.jackrabbit.oak.stats;
 
-import aQute.bnd.annotation.ProviderType;
-
-/**
- * /**
- * A metric which calculates the distribution of a value.
- */
-@ProviderType
-public interface HistogramStats extends Stats{
-
+public interface Counting {
     /**
-     * Adds a recorded value.
+     * Returns the current count.
      *
-     * @param value the length of the value
+     * @return the current count
      */
-    void update(long value);
+    long getCount();
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/DefaultStatisticsProvider.java
 Wed Dec 23 06:23:09 2015
@@ -42,32 +42,32 @@ public final class DefaultStatisticsProv
 
     @Override
     public MeterStats getMeter(String name) {
-        return getStats(name, true);
+        return getStats(name, true, SimpleStats.Type.METER);
     }
 
     @Override
     public CounterStats getCounterStats(String name) {
-        return getStats(name, false);
+        return getStats(name, false, SimpleStats.Type.COUNTER);
     }
 
     @Override
     public TimerStats getTimer(String name) {
-        return getStats(name, true);
+        return getStats(name, true, SimpleStats.Type.TIMER);
     }
 
     @Override
     public HistogramStats getHistogram(String name) {
-        return getStats(name, true);
+        return getStats(name, true, SimpleStats.Type.HISTOGRAM);
     }
 
-    private synchronized SimpleStats getStats(String type, boolean 
resetValueEachSecond){
+    private synchronized SimpleStats getStats(String type, boolean 
resetValueEachSecond, SimpleStats.Type statsType){
         Type enumType = Type.getType(type);
         SimpleStats stats = statsMeters.get(type);
         if (stats == null){
             if (enumType != null) {
-                stats = new SimpleStats(repoStats.getCounter(enumType));
+                stats = new SimpleStats(repoStats.getCounter(enumType), 
statsType);
             } else {
-                stats = new SimpleStats(repoStats.getCounter(type, 
resetValueEachSecond));
+                stats = new SimpleStats(repoStats.getCounter(type, 
resetValueEachSecond), statsType);
             }
             statsMeters.put(type, stats);
         }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/HistogramStats.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/HistogramStats.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/HistogramStats.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/HistogramStats.java
 Wed Dec 23 06:23:09 2015
@@ -26,7 +26,7 @@ import aQute.bnd.annotation.ProviderType
  * A metric which calculates the distribution of a value.
  */
 @ProviderType
-public interface HistogramStats extends Stats{
+public interface HistogramStats extends Stats, Counting{
 
     /**
      * Adds a recorded value.

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/MeterStats.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/MeterStats.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/MeterStats.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/MeterStats.java
 Wed Dec 23 06:23:09 2015
@@ -22,7 +22,7 @@ package org.apache.jackrabbit.oak.stats;
 import aQute.bnd.annotation.ProviderType;
 
 @ProviderType
-public interface MeterStats extends Stats{
+public interface MeterStats extends Stats, Counting{
     /**
      * Mark the occurrence of an event.
      */

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/SimpleStats.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/SimpleStats.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/SimpleStats.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/SimpleStats.java
 Wed Dec 23 06:23:09 2015
@@ -23,15 +23,29 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
 public final class SimpleStats implements TimerStats, MeterStats, 
CounterStats, HistogramStats {
+    public enum Type {COUNTER, METER, TIMER, HISTOGRAM}
     private final AtomicLong statsHolder;
+    private final AtomicLong counter = new AtomicLong();
+    private final Type type;
 
-    public SimpleStats(AtomicLong statsHolder) {
+    public SimpleStats(AtomicLong statsHolder, Type type) {
         this.statsHolder = statsHolder;
+        this.type = type;
     }
 
     @Override
     public long getCount() {
-        return statsHolder.get();
+        switch(type){
+            case HISTOGRAM:
+            case TIMER:
+                //For timer and histogram we need to manage explicit
+                //invocation count
+                return counter.get();
+            default :
+                //For meter and counter the statsHolder value is
+                //same as count
+                return statsHolder.get();
+        }
     }
 
     @Override
@@ -66,6 +80,7 @@ public final class SimpleStats implement
 
     @Override
     public void update(long duration, TimeUnit unit) {
+        counter.incrementAndGet();
         statsHolder.getAndAdd(unit.toMillis(duration));
     }
 
@@ -76,6 +91,7 @@ public final class SimpleStats implement
 
     @Override
     public void update(long value) {
+        counter.incrementAndGet();
         statsHolder.getAndAdd(value);
     }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/TimerStats.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/TimerStats.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/TimerStats.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/TimerStats.java
 Wed Dec 23 06:23:09 2015
@@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit;
 import aQute.bnd.annotation.ProviderType;
 
 @ProviderType
-public interface TimerStats extends Stats{
+public interface TimerStats extends Stats, Counting{
     /**
      * A timing context.
      *

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/package-info.java
 Wed Dec 23 06:23:09 2015
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("2.1.0")
+@Version("3.0.0")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.stats;
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStatsTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStatsTest.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStatsTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStatsTest.java
 Wed Dec 23 06:23:09 2015
@@ -39,10 +39,11 @@ import static org.junit.Assert.assertTru
 
 public class CompositeStatsTest {
     private MetricRegistry registry = new MetricRegistry();
-    private SimpleStats simpleStats = new SimpleStats(new AtomicLong());
+
 
     @Test
     public void counter() throws Exception {
+        SimpleStats simpleStats = new SimpleStats(new AtomicLong(), 
SimpleStats.Type.COUNTER);
         Counter counter = registry.counter("test");
         CompositeStats counterStats = new CompositeStats(simpleStats, counter);
 
@@ -75,6 +76,7 @@ public class CompositeStatsTest {
 
     @Test
     public void meter() throws Exception {
+        SimpleStats simpleStats = new SimpleStats(new AtomicLong(), 
SimpleStats.Type.METER);
         Meter meter = registry.meter("test");
         CompositeStats meterStats = new CompositeStats(simpleStats, meter);
 
@@ -93,12 +95,17 @@ public class CompositeStatsTest {
 
     @Test
     public void timer() throws Exception {
+        AtomicLong counter = new AtomicLong();
+        SimpleStats simpleStats = new SimpleStats(counter, 
SimpleStats.Type.TIMER);
         Timer time = registry.timer("test");
         CompositeStats timerStats = new CompositeStats(simpleStats, time);
 
         timerStats.update(100, TimeUnit.SECONDS);
         assertEquals(1, time.getCount());
-        assertEquals(TimeUnit.SECONDS.toMillis(100), simpleStats.getCount());
+        assertEquals(TimeUnit.SECONDS.toMillis(100), counter.get());
+
+        timerStats.update(100, TimeUnit.SECONDS);
+        assertEquals(2, timerStats.getCount());
 
         assertFalse(timerStats.isMeter());
         assertTrue(timerStats.isTimer());
@@ -108,6 +115,7 @@ public class CompositeStatsTest {
 
     @Test
     public void histogram() throws Exception {
+        SimpleStats simpleStats = new SimpleStats(new AtomicLong(), 
SimpleStats.Type.HISTOGRAM);
         Histogram histo = registry.histogram("test");
         CompositeStats histoStats = new CompositeStats(simpleStats, histo);
 
@@ -124,6 +132,8 @@ public class CompositeStatsTest {
 
     @Test
     public void timerContext() throws Exception{
+        AtomicLong counter = new AtomicLong();
+        SimpleStats simpleStats = new SimpleStats(counter, 
SimpleStats.Type.TIMER);
         VirtualClock clock = new VirtualClock();
         Timer time = new Timer(new ExponentiallyDecayingReservoir(), clock);
 
@@ -134,7 +144,7 @@ public class CompositeStatsTest {
         context.close();
 
         assertEquals(1, time.getCount());
-        assertEquals(TimeUnit.SECONDS.toMillis(314), simpleStats.getCount());
+        assertEquals(TimeUnit.SECONDS.toMillis(314), counter.get());
     }
 
     private static class VirtualClock extends com.codahale.metrics.Clock {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/SimpleStatsTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/SimpleStatsTest.java?rev=1721493&r1=1721492&r2=1721493&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/SimpleStatsTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/stats/SimpleStatsTest.java
 Wed Dec 23 06:23:09 2015
@@ -34,7 +34,7 @@ public class SimpleStatsTest {
     @Test
     public void usageTest() throws Exception {
         AtomicLong counter = new AtomicLong();
-        SimpleStats stats = new SimpleStats(counter);
+        SimpleStats stats = new SimpleStats(counter, SimpleStats.Type.COUNTER);
 
         stats.mark();
         assertEquals(1, counter.get());


Reply via email to