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 mr...@apache.org on 2017/12/13 13:59:18 UTC
svn commit: r1818017 - in /jackrabbit/oak/trunk/oak-core-spi/src:
main/java/org/apache/jackrabbit/oak/stats/
test/java/org/apache/jackrabbit/oak/stats/
Author: mreutegg
Date: Wed Dec 13 13:59:18 2017
New Revision: 1818017
URL: http://svn.apache.org/viewvc?rev=1818017&view=rev
Log:
OAK-7055: Expose observation queue max length as metric
Modified:
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/RepositoryStats.java
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java
jackrabbit/oak/trunk/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java
Modified: jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/RepositoryStats.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/RepositoryStats.java?rev=1818017&r1=1818016&r2=1818017&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/RepositoryStats.java (original)
+++ jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/RepositoryStats.java Wed Dec 13 13:59:18 2017
@@ -45,6 +45,8 @@ import org.apache.jackrabbit.stats.TimeS
public class RepositoryStats extends AnnotatedStandardMBean implements RepositoryStatsMBean {
+ static final String OBSERVATION_QUEUE_MAX_LENGTH = "OBSERVATION_QUEUE_MAX_LENGTH";
+
private final RepositoryStatistics repoStats;
private final TimeSeries maxQueueLength;
Modified: jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java?rev=1818017&r1=1818016&r2=1818017&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java (original)
+++ jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/stats/StatisticManager.java Wed Dec 13 13:59:18 2017
@@ -44,6 +44,7 @@ public class StatisticManager {
private final QueryStatImpl queryStat = new QueryStatImpl();
private final StatisticsProvider repoStats;
private final TimeSeriesMax maxQueueLength;
+ private final CounterStats maxQueueLengthCounter;
private final CompositeRegistration registration;
/**
@@ -65,7 +66,16 @@ public class StatisticManager {
public StatisticManager(Whiteboard whiteboard, ScheduledExecutorService executor) {
queryStat.setEnabled(true);
repoStats = getStatsProvider(whiteboard, executor);
- maxQueueLength = new TimeSeriesMax(-1);
+ maxQueueLengthCounter = repoStats.getCounterStats(
+ RepositoryStats.OBSERVATION_QUEUE_MAX_LENGTH, StatsOptions.METRICS_ONLY);
+ maxQueueLength = new TimeSeriesMax(-1) {
+ @Override
+ public void recordValue(long value) {
+ super.recordValue(value);
+ long currentValue = maxQueueLengthCounter.getCount();
+ maxQueueLengthCounter.inc(Math.max(value, currentValue) - currentValue);
+ }
+ };
registration = new CompositeRegistration(
registerMBean(whiteboard, QueryStatManagerMBean.class, new QueryStatManager(queryStat),
"QueryStat", "Oak Query Statistics"),
@@ -75,6 +85,8 @@ public class StatisticManager {
@Override
public void run() {
maxQueueLength.recordOneSecond();
+ // reset counter to missing value (-1)
+ maxQueueLengthCounter.dec(maxQueueLengthCounter.getCount() + 1);
}
}, 1));
}
Modified: jackrabbit/oak/trunk/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java?rev=1818017&r1=1818016&r2=1818017&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java (original)
+++ jackrabbit/oak/trunk/oak-core-spi/src/test/java/org/apache/jackrabbit/oak/stats/StatisticManagerTest.java Wed Dec 13 13:59:18 2017
@@ -19,9 +19,11 @@
package org.apache.jackrabbit.oak.stats;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.atomic.AtomicLong;
import com.google.common.collect.Maps;
import org.apache.jackrabbit.api.jmx.QueryStatManagerMBean;
@@ -31,6 +33,7 @@ import org.apache.jackrabbit.oak.api.jmx
import org.apache.jackrabbit.oak.spi.whiteboard.DefaultWhiteboard;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils;
+import org.apache.jackrabbit.stats.TimeSeriesMax;
import org.junit.After;
import org.junit.Test;
@@ -84,6 +87,46 @@ public class StatisticManagerTest {
assertEquals(StatsOptions.DEFAULT, optionsPassed.get(Type.SESSION_WRITE_COUNTER.name()));
}
+ @Test
+ public void observationQueueMaxLength() {
+ AtomicLong maxQueueLength = new AtomicLong();
+ SimpleStats stats = new SimpleStats(maxQueueLength, SimpleStats.Type.COUNTER);
+ Whiteboard wb = new DefaultWhiteboard();
+ wb.register(StatisticsProvider.class, new DummyStatsProvider() {
+ @Override
+ public CounterStats getCounterStats(String name,
+ StatsOptions options) {
+ if (name.equals(RepositoryStats.OBSERVATION_QUEUE_MAX_LENGTH)) {
+ return stats;
+ }
+ return super.getCounterStats(name, options);
+ }
+ }, null);
+ StatisticManager mgr = new StatisticManager(wb, executorService);
+
+ TimeSeriesMax rec = mgr.maxQueLengthRecorder();
+ List<Runnable> services = wb.track(Runnable.class).getServices();
+ assertEquals(1, services.size());
+ // this is the scheduled task registered by the StatisticsManager
+ // updating the TimeSeries every second
+ Runnable pulse = services.get(0);
+
+ // must reset the stats to 'unknown' (-1)
+ pulse.run();
+ assertEquals(-1L, maxQueueLength.get());
+
+ rec.recordValue(7);
+ rec.recordValue(5);
+ rec.recordValue(-1);
+
+ // must return the max value
+ assertEquals(7L, maxQueueLength.get());
+
+ // must reset the stats to 'unknown' (-1)
+ pulse.run();
+ assertEquals(-1L, maxQueueLength.get());
+ }
+
@After
public void cleanup() {
executorService.shutdownNow();