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(