Author: chetanm
Date: Tue Nov 24 15:52:36 2015
New Revision: 1716185
URL: http://svn.apache.org/viewvc?rev=1716185&view=rev
Log:
OAK-3654 - Integrate with Metrics for various stats collection
Refactored to allow turning metric off for specific type in a simpler way.
Metrics is turned off for all session related metric
Modified:
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/MetricStatisticsProviderTest.java
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadPropertyTest.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=1716185&r1=1716184&r2=1716185&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 15:52:36 2015
@@ -44,6 +44,7 @@ import org.apache.jackrabbit.oak.stats.C
import org.apache.jackrabbit.oak.stats.MeterStats;
import org.apache.jackrabbit.oak.stats.SimpleStats;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
+import org.apache.jackrabbit.oak.stats.Stats;
import org.apache.jackrabbit.oak.stats.TimerStats;
import org.apache.jackrabbit.stats.RepositoryStatisticsImpl;
import org.slf4j.Logger;
@@ -55,16 +56,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
+ * Types for which Noop Variant has to be used
*/
- 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 static final Set<String> NOOPS_TYPES = ImmutableSet.of(
+ Type.SESSION_READ_DURATION.name(),
+ Type.SESSION_READ_COUNTER.name(),
+ Type.SESSION_WRITE_DURATION.name(),
+ Type.SESSION_WRITE_COUNTER.name()
);
- private final Map<String, CompositeStats> statsRegistry =
Maps.newHashMap();
+ private final Map<String, Stats> statsRegistry = Maps.newHashMap();
private final MetricRegistry registry;
private final JmxReporter reporter;
private final RepositoryStatisticsImpl repoStats;
@@ -99,20 +100,17 @@ public class MetricStatisticsProvider im
@Override
public MeterStats getMeter(String name) {
- if (noopMeter(name)){
- return NOOP.getMeter(name);
- }
- return getStats(name, StatsType.METER);
+ return getStats(name, StatsBuilder.METERS);
}
@Override
public CounterStats getCounterStats(String name) {
- return getStats(name, StatsType.COUNTER);
+ return getStats(name, StatsBuilder.COUNTERS);
}
@Override
public TimerStats getTimer(String name) {
- return getStats(name, StatsType.TIMER);
+ return getStats(name, StatsBuilder.TIMERS);
}
public MetricRegistry getRegistry() {
@@ -123,49 +121,38 @@ public class MetricStatisticsProvider im
return repoStats;
}
- private synchronized CompositeStats getStats(String type, StatsType
statsType) {
+ private synchronized <T extends Stats> T getStats(String type,
StatsBuilder<T> builder) {
String name = type;
Type enumType = Type.getType(type);
- CompositeStats stats = statsRegistry.get(type);
+ Stats stats = statsRegistry.get(type);
if (stats == null) {
SimpleStats delegate;
if (enumType != null) {
delegate = new SimpleStats(repoStats.getCounter(enumType));
name = typeToName(enumType);
} else {
- boolean resetValueEachSecond = statsType != StatsType.COUNTER;
+ boolean resetValueEachSecond = builder !=
StatsBuilder.COUNTERS;
delegate = new SimpleStats(repoStats.getCounter(type,
resetValueEachSecond));
}
- stats = createStat(name, statsType, delegate);
+
+ if (NOOPS_TYPES.contains(name)) {
+ stats = delegate;
+ } else {
+ stats = builder.newComposite(delegate, registry, name);
+ }
+
statsRegistry.put(type, stats);
}
- return stats;
- }
- private CompositeStats createStat(String name, StatsType statsType,
SimpleStats delegate) {
- switch (statsType) {
- case COUNTER:
- MetricCounterStats counter = new
MetricCounterStats(registry.counter(name));
- return new CompositeStats(delegate, counter);
- case TIMER:
- MetricTimerStats timer = new
MetricTimerStats(registry.timer(name));
- return new CompositeStats(delegate, timer);
- case METER:
- MetricMeterStats meter = new
MetricMeterStats(registry.meter(name));
- return new CompositeStats(delegate, meter);
+ if (builder.isInstance(stats)) {
+ //noinspection unchecked
+ return (T) stats;
}
+
throw new IllegalStateException();
}
private void registerAverages() {
- registry.register(typeToName(Type.SESSION_READ_AVERAGE),
- new
AvgGauge(registry.meter(typeToName(Type.SESSION_READ_COUNTER)),
-
registry.timer(typeToName(Type.SESSION_READ_DURATION))));
-
- registry.register(typeToName(Type.SESSION_WRITE_AVERAGE),
- new
AvgGauge(registry.meter(typeToName(Type.SESSION_WRITE_COUNTER)),
-
registry.timer(typeToName(Type.SESSION_WRITE_DURATION))));
-
registry.register(typeToName(Type.QUERY_AVERAGE),
new AvgGauge(registry.meter(typeToName(Type.QUERY_COUNT)),
registry.timer(typeToName(Type.QUERY_DURATION))));
@@ -175,11 +162,49 @@ public class MetricStatisticsProvider im
registry.timer(typeToName(Type.OBSERVATION_EVENT_DURATION))));
}
- private boolean noopMeter(String name) {
- return NOOP_METERS.contains(name);
- }
+ @SuppressWarnings("unused")
+ private interface StatsBuilder<T extends Stats> {
+ StatsBuilder<CounterStats> COUNTERS = new StatsBuilder<CounterStats>()
{
+ @Override
+ public CompositeStats newComposite(SimpleStats delegate,
MetricRegistry registry,String name) {
+ return new CompositeStats(delegate, new
MetricCounterStats(registry.counter(name)));
+ }
+
+ @Override
+ public boolean isInstance(Stats metric) {
+ return CounterStats.class.isInstance(metric);
+ }
+ };
- private enum StatsType {METER, COUNTER, TIMER}
+ StatsBuilder<MeterStats> METERS = new StatsBuilder<MeterStats>() {
+ @Override
+ public CompositeStats newComposite(SimpleStats delegate,
MetricRegistry registry,String name) {
+ return new CompositeStats(delegate, new
MetricMeterStats(registry.meter(name)));
+ }
+
+ @Override
+ public boolean isInstance(Stats metric) {
+ return MeterStats.class.isInstance(metric);
+ }
+ };
+
+ StatsBuilder<TimerStats> TIMERS = new StatsBuilder<TimerStats>() {
+
+ @Override
+ public CompositeStats newComposite(SimpleStats delegate,
MetricRegistry registry,String name) {
+ return new CompositeStats(delegate, new
MetricTimerStats(registry.timer(name)));
+ }
+
+ @Override
+ public boolean isInstance(Stats metric) {
+ return TimerStats.class.isInstance(metric);
+ }
+ };
+
+ CompositeStats newComposite(SimpleStats delegate, MetricRegistry
registry,String name);
+
+ boolean isInstance(Stats stats);
+ }
private static class AvgGauge extends RatioGauge {
private final Meter meter;
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=1716185&r1=1716184&r2=1716185&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 15:52:36 2015
@@ -36,6 +36,7 @@ import org.apache.jackrabbit.api.stats.R
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.SimpleStats;
import org.apache.jackrabbit.oak.stats.TimerStats;
import org.junit.After;
import org.junit.Test;
@@ -53,8 +54,8 @@ public class MetricStatisticsProviderTes
@Test
public void basicSetup() throws Exception {
statsProvider = new MetricStatisticsProvider(server, executorService);
- assertEquals(4, statsProvider.getRegistry().getMeters().size());
- assertEquals(4, statsProvider.getRegistry().getTimers().size());
+ assertEquals(2, statsProvider.getRegistry().getMeters().size());
+ assertEquals(2, statsProvider.getRegistry().getTimers().size());
assertNotNull(statsProvider.getStats());
assertEquals(statsProvider.getRegistry().getMetrics().size(),
getMetricMbeans().size());
@@ -110,11 +111,10 @@ public class MetricStatisticsProviderTes
}
@Test
- public void noopMeter() throws Exception{
+ 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);
+ assertTrue(statsProvider.getTimer(Type.SESSION_READ_DURATION.name())
instanceof SimpleStats);
+ assertTrue(statsProvider.getTimer(Type.SESSION_WRITE_DURATION.name())
instanceof SimpleStats);
assertNotEquals(statsProvider.getMeter(Type.OBSERVATION_EVENT_COUNTER.name()),
NoopStats.INSTANCE);
}
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadPropertyTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadPropertyTest.java?rev=1716185&r1=1716184&r2=1716185&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadPropertyTest.java
(original)
+++
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ReadPropertyTest.java
Tue Nov 24 15:52:36 2015
@@ -99,7 +99,7 @@ public class ReadPropertyTest extends Ab
.filter(new MetricFilter() {
@Override
public boolean matches(String name, Metric
metric) {
- return
"SESSION_READ_DURATION".equals(name);
+ return name.startsWith("SESSION_READ");
}
})
.convertDurationsTo(TimeUnit.MICROSECONDS)