Author: mreutegg
Date: Wed Nov 29 16:22:19 2017
New Revision: 1816639

URL: http://svn.apache.org/viewvc?rev=1816639&view=rev
Log:
OAK-4511: Enable collection of stats around persisted branch created in 
DocumentNodeStore

Modified:
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBeanImpl.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollector.java
    
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollectorIT.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java?rev=1816639&r1=1816638&r2=1816639&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreBranch.java
 Wed Nov 29 16:22:19 2017
@@ -548,6 +548,11 @@ class DocumentNodeStoreBranch implements
         /** Root state of the transient head, top of persisted branch. */
         private DocumentNodeState head;
 
+        /**
+         * Number of commits on this persisted branch.
+         */
+        private int numCommits;
+
         @Override
         public String toString() {
             return "Persisted[" + base + ", " + head + ']';
@@ -606,11 +611,12 @@ class DocumentNodeStoreBranch implements
                     public DocumentNodeState call() throws Exception {
                         checkForConflicts();
                         NodeState toCommit = 
checkNotNull(hook).processCommit(base, head, info);
-                        head = DocumentNodeStoreBranch.this.persist(toCommit, 
head, info);
+                        persistTransientHead(toCommit);
                         return 
store.getRoot(store.merge(head.getRootRevision(), info));
                     }
                 });
                 branchState = new Merged(base);
+                store.getStatsCollector().doneMergeBranch(numCommits);
                 success = true;
                 return newRoot;
             } catch (CommitFailedException e) {
@@ -632,6 +638,8 @@ class DocumentNodeStoreBranch implements
 
         private void persistTransientHead(NodeState newHead) {
             head = DocumentNodeStoreBranch.this.persist(newHead, head, 
CommitInfo.EMPTY);
+            numCommits++;
+            store.getStatsCollector().doneBranchCommit();
         }
 
         private void resetBranch(DocumentNodeState branchHead, 
DocumentNodeState ancestor) {

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java?rev=1816639&r1=1816638&r2=1816639&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBean.java
 Wed Nov 29 16:22:19 2017
@@ -60,4 +60,8 @@ public interface DocumentNodeStoreMBean
     CompositeData getExternalChangeCountHistory();
 
     CompositeData getBackgroundUpdateCountHistory();
+
+    CompositeData getBranchCommitHistory();
+
+    CompositeData getMergeBranchCommitHistory();
 }

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBeanImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBeanImpl.java?rev=1816639&r1=1816638&r2=1816639&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBeanImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreMBeanImpl.java
 Wed Nov 29 16:22:19 2017
@@ -165,6 +165,18 @@ final class DocumentNodeStoreMBeanImpl e
                         "background update");
     }
 
+    @Override
+    public CompositeData getBranchCommitHistory() {
+        return getTimeSeriesData(DocumentNodeStoreStats.BRANCH_COMMIT_COUNT,
+                "Branch commit count");
+    }
+
+    @Override
+    public CompositeData getMergeBranchCommitHistory() {
+        return 
getTimeSeriesData(DocumentNodeStoreStats.MERGE_BRANCH_COMMIT_COUNT,
+                "Number of merged branch commits");
+    }
+
     private CompositeData getTimeSeriesData(String name, String desc) {
         return TimeSeriesStatsUtil.asCompositeData(getTimeSeries(name), desc);
     }

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java?rev=1816639&r1=1816638&r2=1816639&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStats.java
 Wed Nov 29 16:22:19 2017
@@ -50,9 +50,11 @@ public class DocumentNodeStoreStats impl
     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";
-
     static final String MERGE_FAILED_EXCLUSIVE = 
"DOCUMENT_NS_MERGE_FAILED_EXCLUSIVE";
 
+    static final String BRANCH_COMMIT_COUNT = 
"DOCUMENT_NS_BRANCH_COMMIT_COUNT";
+    static final String MERGE_BRANCH_COMMIT_COUNT = 
"DOCUMENT_NS_MERGE_BRANCH_COMMIT_COUNT";
+
     private final TimerStats readHead;
     private final TimerStats readCacheInvalidate;
     private final TimerStats readDiffCache;
@@ -75,9 +77,11 @@ public class DocumentNodeStoreStats impl
     private final TimerStats mergeSuccessTime;
     private final MeterStats mergeSuccessExclusive;
     private final MeterStats mergeSuccessSuspended;
-
     private final MeterStats mergeFailedExclusive;
 
+    private final MeterStats branchCommitRate;
+    private final MeterStats mergeBranchCommitRate;
+
 
     public DocumentNodeStoreStats(StatisticsProvider sp) {
         readHead = sp.getTimer(BGR_READ_HEAD, StatsOptions.METRICS_ONLY);
@@ -102,8 +106,10 @@ public class DocumentNodeStoreStats impl
         mergeSuccessTime = sp.getTimer(MERGE_SUCCESS_TIME, 
StatsOptions.METRICS_ONLY);
         mergeSuccessExclusive = sp.getMeter(MERGE_SUCCESS_EXCLUSIVE, 
StatsOptions.METRICS_ONLY);
         mergeSuccessSuspended = sp.getMeter(MERGE_SUCCESS_SUSPENDED, 
StatsOptions.METRICS_ONLY);
-
         mergeFailedExclusive = sp.getMeter(MERGE_FAILED_EXCLUSIVE, 
StatsOptions.DEFAULT); //Enable time series
+
+        branchCommitRate = sp.getMeter(BRANCH_COMMIT_COUNT, 
StatsOptions.DEFAULT);
+        mergeBranchCommitRate = sp.getMeter(MERGE_BRANCH_COMMIT_COUNT, 
StatsOptions.DEFAULT);
     }
 
     @Override
@@ -135,10 +141,20 @@ public class DocumentNodeStoreStats impl
     }
 
     @Override
-    public void doneMerge(int numRetries, long timeTaken, boolean suspended, 
boolean exclusive) {
+    public void doneBranchCommit() {
+        branchCommitRate.mark();
+    }
+
+    @Override
+    public void doneMergeBranch(int numCommits) {
+        mergeBranchCommitRate.mark(numCommits);
+    }
+
+    @Override
+    public void doneMerge(int numRetries, long time, boolean suspended, 
boolean exclusive) {
         mergeSuccessRate.mark();
         mergeSuccessRetries.update(numRetries);
-        mergeSuccessTime.update(timeTaken, TimeUnit.MILLISECONDS);
+        mergeSuccessTime.update(time, TimeUnit.MILLISECONDS);
 
         if (exclusive) {
             mergeSuccessExclusive.mark();

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollector.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollector.java?rev=1816639&r1=1816638&r2=1816639&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollector.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollector.java
 Wed Nov 29 16:22:19 2017
@@ -24,7 +24,11 @@ public interface DocumentNodeStoreStatsC
 
     void doneBackgroundUpdate(BackgroundWriteStats stats);
 
-    void doneMerge(int numRetries, long timeTaken, boolean suspended, boolean 
exclusive);
+    void doneBranchCommit();
+
+    void doneMergeBranch(int numCommits);
+
+    void doneMerge(int numRetries, long time, boolean suspended, boolean 
exclusive);
 
     void failedMerge(int numRetries, long time, boolean suspended, boolean 
exclusive);
 }

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollectorIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollectorIT.java?rev=1816639&r1=1816638&r2=1816639&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollectorIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreStatsCollectorIT.java
 Wed Nov 29 16:22:19 2017
@@ -30,12 +30,14 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.apache.jackrabbit.oak.plugins.document.TestUtils.merge;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 public class DocumentNodeStoreStatsCollectorIT {
@@ -51,6 +53,7 @@ public class DocumentNodeStoreStatsColle
         nodeStore = builderProvider.newBuilder()
                 .setAsyncDelay(0)
                 .setNodeStoreStatsCollector(statsCollector)
+                .setUpdateLimit(10)
                 .getNodeStore();
         // do not retry failed merges
         nodeStore.setMaxBackOffMillis(0);
@@ -104,4 +107,16 @@ public class DocumentNodeStoreStatsColle
         verify(statsCollector).failedMerge(anyInt(), anyLong(), eq(false), 
eq(true));
     }
 
+    @Test
+    public void branchCommit() throws Exception {
+        int updateLimit = nodeStore.getUpdateLimit();
+        NodeBuilder nb = nodeStore.getRoot().builder();
+        for (int i = 0; i < updateLimit; i++) {
+            nb.child("node-" + i).setProperty("p", "v");
+        }
+        merge(nodeStore, nb);
+
+        verify(statsCollector, times(2)).doneBranchCommit();
+        verify(statsCollector).doneMergeBranch(2);
+    }
 }
\ No newline at end of file


Reply via email to