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