You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2015/12/23 10:11:57 UTC

svn commit: r1721508 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/metric/ test/java/org/apache/jackrabbit/oak/plugins/metric/

Author: chetanm
Date: Wed Dec 23 09:11:57 2015
New Revision: 1721508

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

Avoid the overhead of SimpleStats abstraction in CompositeStats as with counter support SimpleStats maintains extra counter which is not required when running with Metrics

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/test/java/org/apache/jackrabbit/oak/plugins/metric/CompositeStatsTest.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=1721508&r1=1721507&r2=1721508&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 09:11:57 2015
@@ -20,6 +20,7 @@
 package org.apache.jackrabbit.oak.plugins.metric;
 
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
 
 import com.codahale.metrics.Counter;
 import com.codahale.metrics.Counting;
@@ -38,30 +39,30 @@ import org.apache.jackrabbit.oak.stats.T
  * stats
  */
 final class CompositeStats implements CounterStats, MeterStats, TimerStats, HistogramStats {
-    private final SimpleStats delegate;
+    private final AtomicLong delegate;
     private final Counter counter;
     private final Timer timer;
     private final Meter meter;
     private final Histogram histogram;
     private final Counting counting;
 
-    public CompositeStats(SimpleStats delegate, Counter counter) {
+    public CompositeStats(AtomicLong delegate, Counter counter) {
         this(delegate, counter, null, null, null, counter);
     }
 
-    public CompositeStats(SimpleStats delegate, Timer timer) {
+    public CompositeStats(AtomicLong delegate, Timer timer) {
         this(delegate, null, timer, null, null, timer);
     }
 
-    public CompositeStats(SimpleStats delegate, Meter meter) {
+    public CompositeStats(AtomicLong delegate, Meter meter) {
         this(delegate, null, null, meter, null, meter);
     }
 
-    public CompositeStats(SimpleStats delegate, Histogram histogram) {
+    public CompositeStats(AtomicLong delegate, Histogram histogram) {
         this(delegate, null, null, null, histogram, histogram);
     }
 
-    private CompositeStats(SimpleStats delegate, Counter counter,
+    private CompositeStats(AtomicLong delegate, Counter counter,
                            Timer timer, Meter meter, Histogram histogram, Counting counting) {
         this.delegate = delegate;
         this.counter = counter;
@@ -78,49 +79,49 @@ final class CompositeStats implements Co
 
     @Override
     public void inc() {
-        delegate.inc();
+        delegate.getAndIncrement();
         counter.inc();
     }
 
     @Override
     public void dec() {
-        delegate.dec();
+        delegate.getAndDecrement();
         counter.dec();
     }
 
     @Override
     public void inc(long n) {
-        delegate.inc(n);
+        delegate.getAndAdd(n);
         counter.inc(n);
     }
 
     @Override
     public void dec(long n) {
-        delegate.dec(n);
+        delegate.getAndAdd(-n);
         counter.dec(n);
     }
 
     @Override
     public void mark() {
-        delegate.mark();
+        delegate.getAndIncrement();
         meter.mark();
     }
 
     @Override
     public void mark(long n) {
-        delegate.mark(n);
+        delegate.getAndAdd(n);
         meter.mark(n);
     }
 
     @Override
     public void update(long duration, TimeUnit unit) {
-        delegate.update(duration, unit);
+        delegate.getAndAdd(unit.toMillis(duration));
         timer.update(duration, unit);
     }
 
     @Override
     public void update(long value) {
-        delegate.update(value);
+        delegate.getAndAdd(value);
         histogram.update(value);
     }
 
@@ -164,16 +165,16 @@ final class CompositeStats implements Co
 
     private static final class StatsContext implements Context {
         private final Timer.Context context ;
-        private final SimpleStats simpleStats;
+        private final AtomicLong delegate;
 
-        private StatsContext(Timer.Context context, SimpleStats delegate) {
+        private StatsContext(Timer.Context context, AtomicLong delegate) {
             this.context = context;
-            this.simpleStats = delegate;
+            this.delegate = delegate;
         }
 
         public long stop() {
             long nanos = context.stop();
-            simpleStats.update(nanos, TimeUnit.NANOSECONDS);
+            delegate.getAndAdd(TimeUnit.NANOSECONDS.toMillis(nanos));
             return nanos;
         }
 

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=1721508&r1=1721507&r2=1721508&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 09:11:57 2015
@@ -131,7 +131,7 @@ public class MetricStatisticsProvider im
             if (options.isOnlyMetricEnabled()) {
                 stats = builder.newMetric(this, name);
             } else if (options.isOnlyTimeSeriesEnabled()){
-                stats = getTimerSeriesStats(name, builder);
+                stats = new SimpleStats(getTimerSeriesStats(name, builder), builder.getType());
             } else {
                 stats = builder.newComposite(getTimerSeriesStats(name, builder), this, name);
             }
@@ -146,7 +146,7 @@ public class MetricStatisticsProvider im
         throw new IllegalStateException();
     }
 
-    private SimpleStats getTimerSeriesStats(String name, StatsBuilder builder){
+    private AtomicLong getTimerSeriesStats(String name, StatsBuilder builder){
         AtomicLong counter;
         Type enumType = Type.getType(name);
         if (enumType != null) {
@@ -155,7 +155,7 @@ public class MetricStatisticsProvider im
             boolean resetValueEachSecond = builder != StatsBuilder.COUNTERS;
             counter = repoStats.getCounter(name, resetValueEachSecond);
         }
-        return new SimpleStats(counter, builder.getType());
+        return counter;
     }
 
     private void registerAverages() {
@@ -173,7 +173,7 @@ public class MetricStatisticsProvider im
     private interface StatsBuilder<T extends Stats> {
         StatsBuilder<CounterStats> COUNTERS = new StatsBuilder<CounterStats>() {
             @Override
-            public CompositeStats newComposite(SimpleStats delegate, MetricStatisticsProvider provider,String name) {
+            public CompositeStats newComposite(AtomicLong delegate, MetricStatisticsProvider provider, String name) {
                 return new CompositeStats(delegate, provider.registry.counter(name));
             }
 
@@ -195,7 +195,7 @@ public class MetricStatisticsProvider im
 
         StatsBuilder<MeterStats> METERS = new StatsBuilder<MeterStats>() {
             @Override
-            public CompositeStats newComposite(SimpleStats delegate, MetricStatisticsProvider provider,String name) {
+            public CompositeStats newComposite(AtomicLong delegate, MetricStatisticsProvider provider, String name) {
                 return new CompositeStats(delegate, getMeter(provider, name));
             }
 
@@ -224,7 +224,7 @@ public class MetricStatisticsProvider im
         StatsBuilder<TimerStats> TIMERS = new StatsBuilder<TimerStats>() {
 
             @Override
-            public CompositeStats newComposite(SimpleStats delegate, MetricStatisticsProvider provider,String name) {
+            public CompositeStats newComposite(AtomicLong delegate, MetricStatisticsProvider provider, String name) {
                 return new CompositeStats(delegate, provider.registry.timer(name));
             }
 
@@ -247,7 +247,7 @@ public class MetricStatisticsProvider im
         StatsBuilder<HistogramStats> HISTOGRAMS = new StatsBuilder<HistogramStats>() {
 
             @Override
-            public CompositeStats newComposite(SimpleStats delegate, MetricStatisticsProvider provider,String name) {
+            public CompositeStats newComposite(AtomicLong delegate, MetricStatisticsProvider provider, String name) {
                 return new CompositeStats(delegate, provider.registry.histogram(name));
             }
 
@@ -267,7 +267,7 @@ public class MetricStatisticsProvider im
             }
         };
 
-        CompositeStats newComposite(SimpleStats delegate, MetricStatisticsProvider provider,String name);
+        CompositeStats newComposite(AtomicLong delegate, MetricStatisticsProvider provider, String name);
 
         Stats newMetric(MetricStatisticsProvider provider,String name);
 

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=1721508&r1=1721507&r2=1721508&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 09:11:57 2015
@@ -28,7 +28,6 @@ import com.codahale.metrics.Histogram;
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.Timer;
-import org.apache.jackrabbit.oak.stats.SimpleStats;
 import org.apache.jackrabbit.oak.stats.TimerStats;
 import org.junit.Test;
 
@@ -43,29 +42,29 @@ public class CompositeStatsTest {
 
     @Test
     public void counter() throws Exception {
-        SimpleStats simpleStats = new SimpleStats(new AtomicLong(), SimpleStats.Type.COUNTER);
+        AtomicLong simpleStats = new AtomicLong();
         Counter counter = registry.counter("test");
         CompositeStats counterStats = new CompositeStats(simpleStats, counter);
 
         counterStats.inc();
-        assertEquals(1, simpleStats.getCount());
+        assertEquals(1, simpleStats.get());
         assertEquals(1, counter.getCount());
         assertEquals(1, counterStats.getCount());
 
         counterStats.inc();
         counterStats.inc();
-        assertEquals(3, simpleStats.getCount());
+        assertEquals(3, simpleStats.get());
 
         counterStats.dec();
-        assertEquals(2, simpleStats.getCount());
+        assertEquals(2, simpleStats.get());
         assertEquals(2, counter.getCount());
 
         counterStats.inc(7);
-        assertEquals(9, simpleStats.getCount());
+        assertEquals(9, simpleStats.get());
         assertEquals(9, counter.getCount());
 
         counterStats.dec(5);
-        assertEquals(4, simpleStats.getCount());
+        assertEquals(4, simpleStats.get());
         assertEquals(4, counter.getCount());
 
         assertFalse(counterStats.isMeter());
@@ -76,16 +75,16 @@ public class CompositeStatsTest {
 
     @Test
     public void meter() throws Exception {
-        SimpleStats simpleStats = new SimpleStats(new AtomicLong(), SimpleStats.Type.METER);
+        AtomicLong simpleStats = new AtomicLong();
         Meter meter = registry.meter("test");
         CompositeStats meterStats = new CompositeStats(simpleStats, meter);
 
         meterStats.mark();
-        assertEquals(1, simpleStats.getCount());
+        assertEquals(1, simpleStats.get());
         assertEquals(1, meter.getCount());
 
         meterStats.mark(5);
-        assertEquals(6, simpleStats.getCount());
+        assertEquals(6, simpleStats.get());
         assertEquals(6, meter.getCount());
         assertTrue(meterStats.isMeter());
         assertFalse(meterStats.isTimer());
@@ -96,9 +95,8 @@ 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);
+        CompositeStats timerStats = new CompositeStats(counter, time);
 
         timerStats.update(100, TimeUnit.SECONDS);
         assertEquals(1, time.getCount());
@@ -115,9 +113,8 @@ 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);
+        CompositeStats histoStats = new CompositeStats(new AtomicLong(), histo);
 
         histoStats.update(100);
         assertEquals(1, histo.getCount());
@@ -133,11 +130,10 @@ 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);
 
-        TimerStats timerStats = new CompositeStats(simpleStats, time);
+        TimerStats timerStats = new CompositeStats(counter, time);
         TimerStats.Context context = timerStats.time();
 
         clock.tick = TimeUnit.SECONDS.toNanos(314);