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