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