From 617cc2ccf19835f6ea13e646c28d0b409690c816 Wed, 6 May 2015 18:36:19 +0300 From: Robert Munteanu Date: Wed, 6 May 2015 18:33:39 +0300 Subject: [PATCH] OAK-2065 - JMX stats for operations being performed in DocumentStore POC of getting background read duration time series as JMX data. diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java index bab4369..5056d15 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java @@ -60,6 +60,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.management.NotCompliantMBeanException; +import javax.management.openmbean.CompositeData; import com.google.common.base.Function; import com.google.common.base.Predicates; @@ -107,6 +108,8 @@ import org.apache.jackrabbit.oak.spi.state.NodeStore; import org.apache.jackrabbit.oak.stats.Clock; import org.apache.jackrabbit.oak.util.PerfLogger; +import org.apache.jackrabbit.stats.TimeSeriesRecorder; +import org.apache.jackrabbit.stats.TimeSeriesStatsUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -261,6 +264,8 @@ private Thread backgroundReadThread; private Thread backgroundUpdateThread; + + private TimeSeriesRecorder backgroundReadTimeSeriesRecorder = new TimeSeriesRecorder(false); /** * Background thread performing the clusterId lease renew. @@ -1635,6 +1640,8 @@ // pull in changes from other cluster nodes BackgroundReadStats readStats = backgroundRead(true); long readTime = clock.getTime() - start; + backgroundReadTimeSeriesRecorder.getCounter().set(readTime); + backgroundReadTimeSeriesRecorder.recordOneSecond(); String msg = "Background read operations stats (read:{} {})"; if (clock.getTime() - start > TimeUnit.SECONDS.toMillis(10)) { // log as info if it took more than 10 seconds @@ -2346,6 +2353,11 @@ } return sdf.format(r.getTimestamp()); } + + @Override + public CompositeData getBackgroundReadOperationsTimeSeries() { + return TimeSeriesStatsUtil.asCompositeData(backgroundReadTimeSeriesRecorder, "backgroundReadOperationStats"); + } } static abstract class NodeStoreTask implements Runnable { diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java index c3f9e3a..dc4f2a3 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java @@ -19,6 +19,8 @@ package org.apache.jackrabbit.oak.plugins.document; +import javax.management.openmbean.CompositeData; + import org.apache.jackrabbit.oak.commons.jmx.Name; @SuppressWarnings("UnusedDeclaration") @@ -40,4 +42,6 @@ String[] getLastKnownRevisions(); String formatRevision(@Name("revision") String rev, @Name("UTC")boolean utc); + + CompositeData getBackgroundReadOperationsTimeSeries(); }