Author: chetanm
Date: Tue Nov 24 05:26:39 2015
New Revision: 1716032
URL: http://svn.apache.org/viewvc?rev=1716032&view=rev
Log:
OAK-3654 - Integrate with Metrics for various stats collection
Use NoopMeter for counters like Session Read, Write etc as they are managed
within timers also
Modified:
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/NoopStats.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java
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=1716032&r1=1716031&r2=1716032&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
Tue Nov 24 05:26:39 2015
@@ -22,6 +22,7 @@ package org.apache.jackrabbit.oak.plugin
import java.io.Closeable;
import java.util.Hashtable;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
import javax.management.MBeanServer;
@@ -34,6 +35,7 @@ import com.codahale.metrics.MetricRegist
import com.codahale.metrics.ObjectNameFactory;
import com.codahale.metrics.RatioGauge;
import com.codahale.metrics.Timer;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import org.apache.jackrabbit.api.stats.RepositoryStatistics;
import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
@@ -52,6 +54,16 @@ public class MetricStatisticsProvider im
private static final String JMX_TYPE_METRICS = "Metrics";
+ /**
+ * Name of Meters for which NoopMeter is to be returned as there are
corresponding
+ * Timer instances which internally manage the Meter
+ */
+ private static final Set<String> NOOP_METERS = ImmutableSet.of(
+ Type.SESSION_READ_COUNTER.name(), //Meter managed in
SESSION_READ_DURATION
+ Type.SESSION_WRITE_COUNTER.name(), //Meter managed in
SESSION_WRITE_DURATION
+ Type.QUERY_COUNT.name() //Meter managed in QUERY_DURATION
+ );
+
private final Map<String, CompositeStats> statsRegistry =
Maps.newHashMap();
private final MetricRegistry registry;
private final JmxReporter reporter;
@@ -87,6 +99,9 @@ public class MetricStatisticsProvider im
@Override
public MeterStats getMeter(String name) {
+ if (noopMeter(name)){
+ return NOOP.getMeter(name);
+ }
return getStats(name, StatsType.METER);
}
@@ -160,6 +175,10 @@ public class MetricStatisticsProvider im
registry.timer(typeToName(Type.OBSERVATION_EVENT_DURATION))));
}
+ private boolean noopMeter(String name) {
+ return NOOP_METERS.contains(name);
+ }
+
private enum StatsType {METER, COUNTER, TIMER}
private static class AvgGauge extends RatioGauge {
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/NoopStats.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/NoopStats.java?rev=1716032&r1=1716031&r2=1716032&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/NoopStats.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/stats/NoopStats.java
Tue Nov 24 05:26:39 2015
@@ -21,7 +21,7 @@ package org.apache.jackrabbit.oak.stats;
import java.util.concurrent.TimeUnit;
-final class NoopStats implements TimerStats, MeterStats, CounterStats {
+public final class NoopStats implements TimerStats, MeterStats, CounterStats {
public static final NoopStats INSTANCE = new NoopStats();
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java?rev=1716032&r1=1716031&r2=1716032&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/metric/MetricStatisticsProviderTest.java
Tue Nov 24 05:26:39 2015
@@ -32,14 +32,16 @@ import javax.management.Query;
import javax.management.QueryExp;
import com.codahale.metrics.JmxReporter;
-import org.apache.jackrabbit.api.stats.RepositoryStatistics;
+import org.apache.jackrabbit.api.stats.RepositoryStatistics.Type;
import org.apache.jackrabbit.oak.stats.CounterStats;
import org.apache.jackrabbit.oak.stats.MeterStats;
+import org.apache.jackrabbit.oak.stats.NoopStats;
import org.apache.jackrabbit.oak.stats.TimerStats;
import org.junit.After;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -94,10 +96,10 @@ public class MetricStatisticsProviderTes
@Test
public void timeSeriesIntegration() throws Exception {
statsProvider = new MetricStatisticsProvider(server, executorService);
- MeterStats meterStats =
statsProvider.getMeter(RepositoryStatistics.Type.QUERY_COUNT.name());
+ MeterStats meterStats =
statsProvider.getMeter(Type.QUERY_COUNT.name());
meterStats.mark(5);
- assertEquals(5,
statsProvider.getRepoStats().getCounter(RepositoryStatistics.Type.QUERY_COUNT).get());
+ assertEquals(5,
statsProvider.getRepoStats().getCounter(Type.QUERY_COUNT).get());
}
@Test
@@ -107,6 +109,15 @@ public class MetricStatisticsProviderTes
assertNotNull(server.getObjectInstance(new
ObjectName("org.apache.jackrabbit.oak:type=Metrics,name=hello")));
}
+ @Test
+ public void noopMeter() throws Exception{
+ statsProvider = new MetricStatisticsProvider(server, executorService);
+ assertEquals(statsProvider.getMeter(Type.SESSION_READ_COUNTER.name()),
NoopStats.INSTANCE);
+
assertEquals(statsProvider.getMeter(Type.SESSION_WRITE_COUNTER.name()),
NoopStats.INSTANCE);
+ assertEquals(statsProvider.getMeter(Type.QUERY_COUNT.name()),
NoopStats.INSTANCE);
+
assertNotEquals(statsProvider.getMeter(Type.OBSERVATION_EVENT_COUNTER.name()),
NoopStats.INSTANCE);
+ }
+
@After
public void cleanup() {
statsProvider.close();