Author: chetanm
Date: Mon Jun 20 10:26:19 2016
New Revision: 1749291
URL: http://svn.apache.org/viewvc?rev=1749291&view=rev
Log:
OAK-2065 - JMX stats for operations being performed in DocumentNodeStore
Expose timeseries data for couple of metrices
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1749291&r1=1749290&r2=1749291&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
Mon Jun 20 10:26:19 2016
@@ -67,6 +67,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.jcr.PropertyType;
import javax.management.NotCompliantMBeanException;
+import javax.management.openmbean.CompositeData;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
@@ -79,6 +80,7 @@ import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.UncheckedExecutionException;
+import org.apache.jackrabbit.api.stats.TimeSeries;
import org.apache.jackrabbit.oak.commons.IOUtils;
import org.apache.jackrabbit.oak.commons.jmx.AnnotatedStandardMBean;
import org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob;
@@ -115,7 +117,9 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.stats.Clock;
+import org.apache.jackrabbit.oak.stats.StatisticsProvider;
import org.apache.jackrabbit.oak.util.PerfLogger;
+import org.apache.jackrabbit.stats.TimeSeriesStatsUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -410,8 +414,11 @@ public final class DocumentNodeStore
private final DocumentNodeStoreStatsCollector nodeStoreStatsCollector;
+ private final StatisticsProvider statisticsProvider;
+
public DocumentNodeStore(DocumentMK.Builder builder) {
this.blobStore = builder.getBlobStore();
+ this.statisticsProvider = builder.getStatisticsProvider();
this.nodeStoreStatsCollector = builder.getNodeStoreStatsCollector();
if (builder.isUseSimpleRevision()) {
this.simpleRevisionCounter = new AtomicInteger(0);
@@ -2595,6 +2602,36 @@ public final class DocumentNodeStore
public long determineServerTimeDifferenceMillis() {
return store.determineServerTimeDifferenceMillis();
}
+
+ @Override
+ public CompositeData getMergeSuccessHistory() {
+ return
getTimeSeriesData(DocumentNodeStoreStats.MERGE_SUCCESS_COUNT, "Merge Success
Count");
+ }
+
+ @Override
+ public CompositeData getMergeFailureHistory() {
+ return
getTimeSeriesData(DocumentNodeStoreStats.MERGE_FAILED_EXCLUSIVE, "Merge failure
count");
+ }
+
+ @Override
+ public CompositeData getExternalChangeCountHistory() {
+ return
getTimeSeriesData(DocumentNodeStoreStats.BGR_NUM_CHANGES_RATE, "Count of nodes
modified by other " +
+ "cluster nodes since last background read");
+ }
+
+ @Override
+ public CompositeData getBackgroundUpdateCountHistory() {
+ return
getTimeSeriesData(DocumentNodeStoreStats.BGW_NUM_WRITES_RATE, "Count of nodes
updated as part of " +
+ "background update");
+ }
+
+ private CompositeData getTimeSeriesData(String name, String desc){
+ return TimeSeriesStatsUtil.asCompositeData(getTimeSeries(name),
desc);
+ }
+
+ private TimeSeries getTimeSeries(String name) {
+ return statisticsProvider.getStats().getTimeSeries(name, true);
+ }
}
static abstract class NodeStoreTask implements Runnable {
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java?rev=1749291&r1=1749290&r2=1749291&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java
Mon Jun 20 10:26:19 2016
@@ -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")
@@ -52,4 +54,12 @@ public interface DocumentNodeStoreMBean
* @throws UnsupportedOperationException if this DocumentStore does not
support this method
*/
long determineServerTimeDifferenceMillis();
+
+ CompositeData getMergeSuccessHistory();
+
+ CompositeData getMergeFailureHistory();
+
+ CompositeData getExternalChangeCountHistory();
+
+ CompositeData getBackgroundUpdateCountHistory();
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java?rev=1749291&r1=1749290&r2=1749291&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java
Mon Jun 20 10:26:19 2016
@@ -45,12 +45,12 @@ public class DocumentNodeStoreStats impl
private static final String BGW_TOTAL = "DOCUMENT_NS_BGW_TOTAL_TIME";
private static final String MERGE_SUCCESS_NUM_RETRY =
"DOCUMENT_NS_MERGE_SUCCESS_RETRY";
- private static final String MERGE_SUCCESS_COUNT =
"DOCUMENT_NS_MERGE_SUCCESS_COUNT";
+ static final String MERGE_SUCCESS_COUNT =
"DOCUMENT_NS_MERGE_SUCCESS_COUNT";
private static final String MERGE_SUCCESS_TIME =
"DOCUMENT_NS_MERGE_SUCCESS_TIME";
private static final String MERGE_SUCCESS_SUSPENDED =
"DOCUMENT_NS_MERGE_SUCCESS_SUSPENDED";
private static final String MERGE_SUCCESS_EXCLUSIVE =
"DOCUMENT_NS_MERGE_SUCCESS_EXCLUSIVE";
- private static final String MERGE_FAILED_EXCLUSIVE =
"DOCUMENT_NS_MERGE_FAILED_EXCLUSIVE";
+ static final String MERGE_FAILED_EXCLUSIVE =
"DOCUMENT_NS_MERGE_FAILED_EXCLUSIVE";
private final TimerStats readHead;
private final TimerStats readCacheInvalidate;
@@ -91,7 +91,7 @@ public class DocumentNodeStoreStats impl
writeSplit = sp.getTimer(BGW_SPLIT, StatsOptions.METRICS_ONLY);
writeWrite = sp.getTimer(BGW_WRITE, StatsOptions.METRICS_ONLY);
writeTotal = sp.getTimer(BGW_TOTAL, StatsOptions.METRICS_ONLY);
- writeNum = sp.getHistogram(BGW_NUM, StatsOptions.DEFAULT);
+ writeNum = sp.getHistogram(BGW_NUM, StatsOptions.METRICS_ONLY);
numWritesRate = sp.getMeter(BGW_NUM_WRITES_RATE,
StatsOptions.DEFAULT); //Enable time series
mergeSuccessRetries = sp.getHistogram(MERGE_SUCCESS_NUM_RETRY,
StatsOptions.METRICS_ONLY);