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/03/06 16:13:20 UTC
svn commit: r1453376 - 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: Wed Mar 6 15:13:20 2013
New Revision: 1453376
URL: http://svn.apache.org/r1453376
Log:
OAK-678: Access to disconnected MemoryNodeBuilder should throw IllegalStateException
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=1453376&r1=1453375&r2=1453376&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 Wed Mar 6 15:13:20 2013
@@ -190,13 +190,18 @@ public class MemoryNodeBuilder implement
/**
* Determine whether this child exists at its direct parent.
- * @return {@code true} iff this child exists at its direct parent.
+ * @return {@code true} iff this child exists at its direct parent.
*/
private boolean exists() {
- // No need to check the base state if write state is null. The fact that we have this
- // builder instance proofs that this child existed at some point as it must have been
- // retrieved from the base state.
- return isRoot() || parent.writeState == null || parent.writeState.hasChildNode(name);
+ if (isRoot()) {
+ return true;
+ }
+ else if (parent.writeState == null) {
+ return parent.baseState != null && parent.baseState.hasChildNode(name);
+ }
+ else {
+ return parent.writeState.hasChildNode(name);
+ }
}
/**
@@ -206,18 +211,19 @@ public class MemoryNodeBuilder implement
private boolean updateReadState() {
if (revision != root.revision) {
assert(!isRoot()); // root never gets here since revision == root.revision
- if (!exists()) {
- return false;
- }
- parent.updateReadState();
- // The builder could have been reset, need to re-get base state
- baseState = parent.getBaseState(name);
+ if (parent.updateReadState() && exists()) {
+ // The builder could have been reset, need to re-get base state
+ baseState = parent.getBaseState(name);
- // ... same for the write state
- writeState = parent.getWriteState(name);
+ // ... same for the write state
+ writeState = parent.getWriteState(name);
+
+ revision = root.revision;
+ return true;
+ }
- revision = root.revision;
+ return false;
}
return writeState != null || baseState != null;
}
@@ -238,8 +244,8 @@ public class MemoryNodeBuilder implement
private MutableNodeState write(long newRevision, boolean reconnect) {
// make sure that all revision numbers up to the root gets updated
if (!isRoot()) {
- checkState(reconnect || exists(), "This node has been removed");
parent.write(newRevision, reconnect);
+ checkState(reconnect || exists(), "This node has been removed");
}
if (writeState == null || revision != root.revision) {
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=1453376&r1=1453375&r2=1453376&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 Wed Mar 6 15:13:20 2013
@@ -182,4 +182,14 @@ public class MemoryNodeBuilderTest {
assertEquals(x.getBaseState(), x.getNodeState());
}
+ @Test(expected = IllegalStateException.class)
+ public void testReadOnRemovedNode() {
+ NodeBuilder root = new MemoryNodeBuilder(BASE);
+ NodeBuilder m = root.child("m");
+ NodeBuilder n = m.child("n");
+
+ root.removeNode("m");
+ n.hasChildNode("any");
+ }
+
}