You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2014/10/23 10:43:29 UTC
svn commit: r1633768 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java
Author: alexparvulescu
Date: Thu Oct 23 08:43:29 2014
New Revision: 1633768
URL: http://svn.apache.org/r1633768
Log:
OAK-2218 Allow SegmentNodeBuilder to provide child builders of the same type
- clarified contract of #updated method for child builders
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java?rev=1633768&r1=1633767&r2=1633768&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java Thu Oct 23 08:43:29 2014
@@ -40,7 +40,19 @@ public class SegmentNodeBuilder extends
private final SegmentWriter writer;
- private long updateCount = 0;
+ /**
+ * Local update counter for the root builder.
+ *
+ * The value encodes both the counter and the type of the node builder:
+ * <ul>
+ * <li>value >= <code>0</code> represents a root builder (builder keeps
+ * counter updates)</li>
+ * <li>value = <code>-1</code> represents a child builder (value doesn't
+ * change, builder doesn't keep an updated counter)</li>
+ * </ul>
+ *
+ */
+ private long updateCount;
SegmentNodeBuilder(SegmentNodeState base) {
this(base, base.getTracker().getWriter());
@@ -49,24 +61,34 @@ public class SegmentNodeBuilder extends
SegmentNodeBuilder(SegmentNodeState base, SegmentWriter writer) {
super(base);
this.writer = writer;
+ this.updateCount = 0;
}
SegmentNodeBuilder(SegmentNodeBuilder parent, String name,
SegmentWriter writer) {
super(parent, name);
this.writer = writer;
+ this.updateCount = -1;
}
//-------------------------------------------------< MemoryNodeBuilder >--
@Override
protected void updated() {
- updateCount++;
- if (updateCount > UPDATE_LIMIT) {
- getNodeState();
+ if (isChildBuilder()) {
+ super.updated();
+ } else {
+ updateCount++;
+ if (updateCount > UPDATE_LIMIT) {
+ getNodeState();
+ }
}
}
+ private boolean isChildBuilder() {
+ return updateCount < 0;
+ }
+
//-------------------------------------------------------< NodeBuilder >--
@Override