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);


Reply via email to