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/04/03 18:14:56 UTC
svn commit: r1464088 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
Author: mduerig
Date: Wed Apr 3 16:14:55 2013
New Revision: 1464088
URL: http://svn.apache.org/r1464088
Log:
OAK-744: Invalid base node states in TreeImpl after commit/refresh/rebase
recalculate a tree's base state on access instead of memoising it
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
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=1464088&r1=1464087&r2=1464088&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 Wed Apr 3 16:14:55 2013
@@ -18,9 +18,17 @@
*/
package org.apache.jackrabbit.oak.core;
+import static com.google.common.base.Objects.toStringHelper;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
+
import java.util.Collections;
import java.util.Iterator;
import java.util.Set;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -44,13 +52,6 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
import org.apache.jackrabbit.oak.spi.state.PropertyBuilder;
-import static com.google.common.base.Objects.toStringHelper;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
-
public class TreeImpl implements Tree {
/**
@@ -64,11 +65,6 @@ public class TreeImpl implements Tree {
private final RootImpl root;
/**
- * The node state this tree is based on. {@code null} if this is a newly added tree.
- */
- private NodeState baseState;
-
- /**
* The {@code NodeBuilder} for the underlying node state
*/
private NodeBuilder nodeBuilder;
@@ -92,7 +88,6 @@ public class TreeImpl implements Tree {
this.root = checkNotNull(root);
this.name = "";
this.nodeBuilder = root.createRootBuilder();
- this.baseState = root.getBaseState();
this.pendingMoves = checkNotNull(pendingMoves);
}
@@ -102,14 +97,8 @@ public class TreeImpl implements Tree {
this.name = checkNotNull(name);
this.nodeBuilder = parent.getNodeBuilder().child(name);
this.pendingMoves = checkNotNull(pendingMoves);
-
- if (parent.baseState == null) {
- this.baseState = null;
- } else {
- this.baseState = parent.baseState.getChildNode(name);
- }
// readstatus is ALLOW_ALL for new items
- readStatus = (baseState == null) ? ReadStatus.ALLOW_ALL : ReadStatus.getChildStatus(parent.readStatus);
+ readStatus = (getBaseState() == null) ? ReadStatus.ALLOW_ALL : ReadStatus.getChildStatus(parent.readStatus);
}
@Override
@@ -164,7 +153,7 @@ public class TreeImpl implements Tree {
return null;
}
- NodeState parentBase = nodeBuilder.getBaseState();
+ NodeState parentBase = getBaseState();
PropertyState base = parentBase == null ? null : parentBase.getProperty(name);
if (base == null) {
@@ -429,9 +418,22 @@ public class TreeImpl implements Tree {
return nodeBuilder;
}
+ /**
+ * The node state this tree is based on. {@code null} if this is a newly added tree.
+ * @return the base node state of this tree
+ */
@CheckForNull
- NodeState getBaseState() {
- return baseState;
+ final NodeState getBaseState() {
+ if (parent == null) {
+ return root.getBaseState();
+ }
+
+ NodeState parentBase = parent.getBaseState();
+ if (parentBase != null) {
+ return parentBase.getChildNode(name);
+ }
+
+ return null;
}
@Nonnull
@@ -458,7 +460,6 @@ public class TreeImpl implements Tree {
void reset(NodeState state) {
checkState(parent == null);
nodeBuilder.reset(state);
- baseState = state;
}
/**