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/08 15:49:08 UTC
svn commit: r1444031 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/api/
oak-core/src/main/java/org/apache/jackrabbit/oak/core/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/
oak-core/src/main/...
Author: mduerig
Date: Fri Feb 8 14:48:52 2013
New Revision: 1444031
URL: http://svn.apache.org/r1444031
Log:
OAK-617: Generalise Tree.Status.REMOVED to DISCONNECTED
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemDelegate.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java?rev=1444031&r1=1444030&r2=1444031&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Tree.java Fri Feb 8 14:48:52 2013
@@ -79,9 +79,9 @@ public interface Tree {
MODIFIED,
/**
- * Item is removed
+ * Item is removed or has become disconnected otherwise (e.g. caused by a refresh).
*/
- REMOVED
+ DISCONNECTED
}
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java?rev=1444031&r1=1444030&r2=1444031&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractNodeLocation.java Fri Feb 8 14:48:52 2013
@@ -85,7 +85,7 @@ abstract class AbstractNodeLocation<T ex
@Override
public boolean exists() {
Status status = getStatus();
- return status != null && status != Status.REMOVED && getTree() != null;
+ return status != null && status != Status.DISCONNECTED && getTree() != null;
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java?rev=1444031&r1=1444030&r2=1444031&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractPropertyLocation.java Fri Feb 8 14:48:52 2013
@@ -47,8 +47,8 @@ abstract class AbstractPropertyLocation<
@Override
public boolean exists() {
- Status status = getStatus();
- return status != null && status != Status.REMOVED && getProperty() != null;
+ Status status = parentLocation.tree.getPropertyStatus(name);
+ return status != null && status != Status.DISCONNECTED && getProperty() != null;
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java?rev=1444031&r1=1444030&r2=1444031&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java Fri Feb 8 14:48:52 2013
@@ -149,8 +149,8 @@ public class TreeImpl implements Tree {
Status nodeStatus = getStatus();
if (nodeStatus == Status.NEW) {
return (hasProperty(name)) ? Status.NEW : null;
- } else if (nodeStatus == Status.REMOVED) {
- return Status.REMOVED; // FIXME not correct if no property existed with that name
+ } else if (nodeStatus == Status.DISCONNECTED) {
+ return Status.DISCONNECTED;
} else {
PropertyState head = internalGetProperty(name);
if (head != null && !canRead(head)) {
@@ -161,7 +161,7 @@ public class TreeImpl implements Tree {
NodeState parentBase = getBaseState();
PropertyState base = parentBase == null ? null : parentBase.getProperty(name);
if (head == null) {
- return (base == null) ? null : Status.REMOVED;
+ return (base == null) ? null : Status.DISCONNECTED;
} else {
if (base == null) {
return Status.NEW;
@@ -209,25 +209,25 @@ public class TreeImpl implements Tree {
}
}
- private boolean isRemoved() {
+ private boolean isDisconnected() {
if (isRoot()) {
return false;
}
if (parent.nodeBuilder == null) {
return false;
}
- if (parent.nodeBuilder.isRemoved()) {
+ if (!parent.nodeBuilder.isConnected()) {
return true;
}
- return getNodeBuilder().isRemoved();
+ return !getNodeBuilder().isConnected();
}
@Override
public Status getStatus() {
root.checkLive();
- if (isRemoved()) {
- return Status.REMOVED;
+ if (isDisconnected()) {
+ return Status.DISCONNECTED;
}
NodeBuilder builder = getNodeBuilder();
@@ -300,8 +300,8 @@ public class TreeImpl implements Tree {
@Override
public boolean remove() {
root.checkLive();
- if (isRemoved()) {
- throw new IllegalStateException("Cannot remove removed tree");
+ if (isDisconnected()) {
+ throw new IllegalStateException("Cannot remove a disconnected tree");
}
if (!isRoot() && parent.hasChild(name)) {
@@ -408,8 +408,8 @@ public class TreeImpl implements Tree {
@CheckForNull
protected NodeState getBaseState() {
- if (isRemoved()) {
- throw new IllegalStateException("Cannot get the base state of a removed tree");
+ if (isDisconnected()) {
+ throw new IllegalStateException("Cannot get the base state of a disconnected tree");
}
NodeState parentBaseState = parent.getBaseState();
@@ -436,8 +436,8 @@ public class TreeImpl implements Tree {
* @param destName new name for this tree
*/
void moveTo(TreeImpl destParent, String destName) {
- if (isRemoved()) {
- throw new IllegalStateException("Cannot move removed tree");
+ if (isDisconnected()) {
+ throw new IllegalStateException("Cannot move a disconnected tree");
}
name = destName;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.java?rev=1444031&r1=1444030&r2=1444031&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/strategy/ContentMirrorStoreStrategy.java Fri Feb 8 14:48:52 2013
@@ -102,7 +102,7 @@ public class ContentMirrorStoreStrategy
}
private static void pruneNode(NodeBuilder parent) {
- if (parent.isRemoved()) {
+ if (!parent.isConnected()) {
return;
}
for (String name : parent.getChildNodeNames()) {
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=1444031&r1=1444030&r2=1444031&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 Fri Feb 8 14:48:52 2013
@@ -198,11 +198,16 @@ public class MemoryNodeBuilder implement
return isRoot() || parent.writeState == null || parent.writeState.hasChildNode(name);
}
- @Nonnull
- private NodeState read() {
+ /**
+ * Update the state of this builder for reading.
+ * @return {@code true} is this reader is connected, {@code false} otherwise.
+ */
+ private boolean updateReadState() {
if (revision != root.revision) {
assert(!isRoot()); // root never gets here since revision == root.revision
- checkState(existsOrDisconnected(), "This node has already been removed");
+ if (!existsOrDisconnected()) {
+ return false;
+ }
parent.read();
// The builder could have been reset, need to re-get base state
@@ -212,16 +217,15 @@ public class MemoryNodeBuilder implement
writeState = parent.getWriteState(name);
revision = root.revision;
- checkState(baseState != null || writeState != null, "This node is disconnected");
}
+ return writeState != null || baseState != null;
+ }
+ @Nonnull
+ private NodeState read() {
+ checkState(updateReadState(), "This node has been removed or is disconnected");
assert classInvariants();
-
- if (writeState != null) {
- return writeState;
- } else {
- return baseState;
- }
+ return writeState != null ? writeState : baseState;
}
@Nonnull
@@ -233,7 +237,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 || existsOrDisconnected(), "This node has already been removed");
+ checkState(skipRemovedCheck || existsOrDisconnected(), "This node has been removed");
parent.write(newRevision, skipRemovedCheck);
}
@@ -304,13 +308,8 @@ public class MemoryNodeBuilder implement
}
@Override
- public boolean isRemoved() {
- return !isRoot() && (parent.isRemoved() || parent.isRemoved(name));
- }
-
- private boolean isRemoved(String name) {
- read();
- return hasBaseState(name) && !hasChildNode(name);
+ public boolean isConnected() {
+ return updateReadState();
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java?rev=1444031&r1=1444030&r2=1444031&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeBuilder.java Fri Feb 8 14:48:52 2013
@@ -53,10 +53,11 @@ public interface NodeBuilder {
boolean isNew();
/**
- * Check whether this builder represents a removed node, which is present in the base state.
- * @return {@code true} for a removed node
+ * Check whether this builder represents a disconnected node. A node is disconnected when it has been
+ * part of a tree but has been subsequently removed.
+ * @return {@code true} for a disconnected node
*/
- boolean isRemoved();
+ boolean isConnected();
/**
* Check whether this builder represents a modified node, which has either modified properties
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java?rev=1444031&r1=1444030&r2=1444031&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ReadOnlyBuilder.java Fri Feb 8 14:48:52 2013
@@ -43,8 +43,8 @@ public class ReadOnlyBuilder implements
}
@Override
- public boolean isRemoved() {
- return false;
+ public boolean isConnected() {
+ return true;
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java?rev=1444031&r1=1444030&r2=1444031&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/TreeImplTest.java Fri Feb 8 14:48:52 2013
@@ -293,8 +293,8 @@ public class TreeImplTest {
Tree x = root.getTree("/x");
Tree y = x.addChild("y");
x.remove();
- assertEquals(Status.REMOVED, x.getStatus());
- assertEquals(Status.REMOVED, y.getStatus());
+ assertEquals(Status.DISCONNECTED, x.getStatus());
+ assertEquals(Status.DISCONNECTED, y.getStatus());
}
@Test
@@ -314,7 +314,7 @@ public class TreeImplTest {
tree = root.getTree("/");
assertEquals(Tree.Status.EXISTING, tree.getPropertyStatus("new"));
tree.removeProperty("new");
- assertEquals(Tree.Status.REMOVED, tree.getPropertyStatus("new"));
+ assertEquals(Tree.Status.DISCONNECTED, tree.getPropertyStatus("new"));
root.commit();
tree = root.getTree("/");
@@ -323,7 +323,7 @@ public class TreeImplTest {
Tree x = root.getTree("/x");
x.setProperty("y", "value1");
x.remove();
- assertEquals(Status.REMOVED, x.getPropertyStatus("y"));
+ assertEquals(Status.DISCONNECTED, x.getPropertyStatus("y"));
}
@Test
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemDelegate.java?rev=1444031&r1=1444030&r2=1444031&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemDelegate.java Fri Feb 8 14:48:52 2013
@@ -84,7 +84,7 @@ public abstract class ItemDelegate {
*/
public boolean isStale() {
Status status = getLocationOrNull().getStatus();
- return status == Status.REMOVED || status == null;
+ return status == Status.DISCONNECTED || status == null;
}
/**