Author: mduerig
Date: Tue Nov 24 17:18:57 2015
New Revision: 1716218

URL: http://svn.apache.org/viewvc?rev=1716218&view=rev
Log:
OAK-3677: NodeStore.merge implementations throw ISE instead of IAE when passed 
a non root builder
- Add proper argument check
- Test case

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/NodeStoreTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java?rev=1716218&r1=1716217&r2=1716218&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java
 Tue Nov 24 17:18:57 2015
@@ -124,12 +124,14 @@ public class MemoryNodeStore implements
             @Nonnull NodeBuilder builder, @Nonnull CommitHook commitHook,
             @Nullable CommitInfo info) throws CommitFailedException {
         checkArgument(builder instanceof MemoryNodeBuilder);
+        MemoryNodeBuilder mnb = (MemoryNodeBuilder) builder;
+        checkArgument(mnb.isRoot());
         checkNotNull(commitHook);
         rebase(builder);
         NodeStoreBranch branch = new MemoryNodeStoreBranch(this, getRoot());
         branch.setRoot(builder.getNodeState());
         NodeState merged = branch.merge(commitHook, info);
-        ((MemoryNodeBuilder) builder).reset(merged);
+        mnb.reset(merged);
         return merged;
     }
 

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=1716218&r1=1716217&r2=1716218&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
 Tue Nov 24 17:18:57 2015
@@ -73,6 +73,13 @@ public class SegmentNodeBuilder extends
         this.updateCount = -1;
     }
 
+    /**
+     * @return  {@code true} iff this builder has been acquired from a root 
node state.
+     */
+    boolean isRootBuilder() {
+        return isRoot();
+    }
+
     //-------------------------------------------------< MemoryNodeBuilder >--
 
     @Override

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java?rev=1716218&r1=1716217&r2=1716218&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
 Tue Nov 24 17:18:57 2015
@@ -215,9 +215,9 @@ public class SegmentNodeStore implements
             @Nonnull NodeBuilder builder, @Nonnull CommitHook commitHook,
             @Nonnull CommitInfo info) throws CommitFailedException {
         checkArgument(builder instanceof SegmentNodeBuilder);
-        checkNotNull(commitHook);
-
         SegmentNodeBuilder snb = (SegmentNodeBuilder) builder;
+        checkArgument(snb.isRootBuilder());
+        checkNotNull(commitHook);
 
         try {
             commitSemaphore.acquire();

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/NodeStoreTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/NodeStoreTest.java?rev=1716218&r1=1716217&r2=1716218&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/NodeStoreTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/state/NodeStoreTest.java
 Tue Nov 24 17:18:57 2015
@@ -125,6 +125,12 @@ public class NodeStoreTest extends OakBa
         store.merge(b2, hook, CommitInfo.EMPTY);
     }
 
+    @Test(expected = IllegalArgumentException.class)
+    public void mergeNodeRoot() throws CommitFailedException {
+        NodeBuilder x = store.getRoot().builder().getChildNode("x");
+        store.merge(x, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+    }
+
     @Test
     public void addExistingNodeJCRLastModified() throws CommitFailedException {
         CommitHook hook = new CompositeHook(


Reply via email to