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 md...@apache.org on 2013/02/07 16:21:15 UTC

svn commit: r1443551 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java

Author: mduerig
Date: Thu Feb  7 15:21:15 2013
New Revision: 1443551

URL: http://svn.apache.org/viewvc?rev=1443551&view=rev
Log:
OAK-614: AssertionError in MemoryNodeBuilder

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java?rev=1443551&r1=1443550&r2=1443551&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java Thu Feb  7 15:21:15 2013
@@ -188,20 +188,19 @@ public class MemoryNodeBuilder implement
     }
 
     /**
-     * Determine whether this child has been removed.
+     * Determine whether this child exists.
      * Assumes {@code read()}, {@code write()} needs not be called.
-     * @return  {@code true} iff this child has been removed
+     * @return  {@code true} iff this child exists
      */
-    private boolean removed() {
-        return !isRoot() && parent.writeState != null &&
-                parent.hasBaseState(name) && !parent.writeState.hasChildNode(name);
+    private boolean exists() {
+        return isRoot() || parent.writeState == null || parent.writeState.hasChildNode(name);
     }
 
     @Nonnull
     private NodeState read() {
         if (revision != root.revision) {
             assert(!isRoot()); // root never gets here since revision == root.revision
-            checkState(!removed(), "This node has already been removed");
+            checkState(exists(), "This node has already been removed");
             parent.read();
 
             // The builder could have been reset, need to re-get base state
@@ -231,7 +230,7 @@ public class MemoryNodeBuilder implement
     private MutableNodeState write(long newRevision, boolean skipRemovedCheck) {
         // make sure that all revision numbers up to the root gets updated
         if (!isRoot()) {
-            checkState(skipRemovedCheck || !removed());
+            checkState(skipRemovedCheck || exists());
             parent.write(newRevision, skipRemovedCheck);
         }
 
@@ -243,7 +242,7 @@ public class MemoryNodeBuilder implement
 
             writeState = parent.getWriteState(name);
             if (writeState == null) {
-                if (removed()) {
+                if (!exists()) {
                     writeState = new MutableNodeState(null);
                 }
                 else {
@@ -385,7 +384,7 @@ public class MemoryNodeBuilder implement
         MutableNodeState childState = getWriteState(name);
         if (childState == null) {
             writeState.nodes.remove(name);
-            childState = createChildBuilder(name).write();
+            childState = createChildBuilder(name).write(root.revision + 1, true);
         }
         childState.reset(state);
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java?rev=1443551&r1=1443550&r2=1443551&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilderTest.java Thu Feb  7 15:21:15 2013
@@ -103,36 +103,44 @@ public class MemoryNodeBuilderTest {
 
     @Test
     public void testReadOnRemoveNode() {
-        NodeBuilder root = new MemoryNodeBuilder(BASE);
-        NodeBuilder child = root.child("x");
+        String[] names = {"x", "new"};
 
-        root.removeNode("x");
-        try {
-            child.getChildNodeCount();
-            fail();
-        } catch (IllegalStateException e) {
-            // expected
-        }
+        for (String name : names) {
+            NodeBuilder root = new MemoryNodeBuilder(BASE);
+            NodeBuilder child = root.child(name);
+
+            root.removeNode(name);
+            try {
+                child.getChildNodeCount();
+                fail();
+            } catch (IllegalStateException e) {
+                // expected
+            }
 
-        root.child("x");
-        assertEquals(0, child.getChildNodeCount()); // reconnect!
+            root.child(name);
+            assertEquals(0, child.getChildNodeCount()); // reconnect!
+        }
     }
 
     @Test
     public void testWriteOnRemoveNode() {
-        NodeBuilder root = new MemoryNodeBuilder(BASE);
-        NodeBuilder child = root.child("x");
+        String[] names = {"x", "new"};
 
-        root.removeNode("x");
-        try {
-            child.setProperty("q", "w");
-            fail();
-        } catch (IllegalStateException e) {
-            // expected
-        }
+        for (String name : names) {
+            NodeBuilder root = new MemoryNodeBuilder(BASE);
+            NodeBuilder child = root.child(name);
+
+            root.removeNode(name);
+            try {
+                child.setProperty("q", "w");
+                fail();
+            } catch (IllegalStateException e) {
+                // expected
+            }
 
-        root.child("x");
-        assertEquals(0, child.getChildNodeCount()); // reconnect!
+            root.child(name);
+            assertEquals(0, child.getChildNodeCount()); // reconnect!
+        }
     }
 
     @Test