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/08/14 17:04:24 UTC
svn commit: r1513924 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
kernel/KernelNodeBuilder.java kernel/KernelRootBuilder.java
plugins/memory/MemoryNodeBuilder.java
Author: mduerig
Date: Wed Aug 14 15:04:23 2013
New Revision: 1513924
URL: http://svn.apache.org/r1513924
Log:
OAK-659 Move purge logic for transient changes below the NodeBuilder interface
KernelNodeBuilder and RootNodeBuilder should return correct base node state
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java?rev=1513924&r1=1513923&r2=1513924&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilder.java Wed Aug 14 15:04:23 2013
@@ -21,6 +21,7 @@ import static com.google.common.base.Pre
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
/**
* This class refines move and copy operations by delegating
@@ -31,7 +32,7 @@ public class KernelNodeBuilder extends M
private final KernelRootBuilder root;
- public KernelNodeBuilder(MemoryNodeBuilder parent, String name, KernelRootBuilder root) {
+ KernelNodeBuilder(MemoryNodeBuilder parent, String name, KernelRootBuilder root) {
super(parent, name);
this.root = checkNotNull(root);
}
@@ -43,6 +44,17 @@ public class KernelNodeBuilder extends M
return new KernelNodeBuilder(this, name, root);
}
+ // TODO optimise this by caching similar to what we do in MemoryNodeBuilder
+ @Override
+ public NodeState getBaseState() {
+ return getParent().getBaseState().getChildNode(getName());
+ }
+
+ @Override
+ public void reset(NodeState newBase) {
+ throw new IllegalStateException("Cannot reset a non-root builder");
+ }
+
/**
* If {@code newParent} is a {@link KernelNodeBuilder} this implementation
* purges all pending changes before applying the move operation. This allows the
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java?rev=1513924&r1=1513923&r2=1513924&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelRootBuilder.java Wed Aug 14 15:04:23 2013
@@ -44,6 +44,14 @@ class KernelRootBuilder extends MemoryNo
private final NodeStore store;
/**
+ * The base state of this builder, possibly non-existent if this builder
+ * represents a new node that didn't yet exist in the base content tree.
+ * This differs from the base state of super since the latter one reflects
+ * the base created by the last purge.
+ */
+ private NodeState base;
+
+ /**
* Private branch used to hold pending changes exceeding {@link #UPDATE_LIMIT}
*/
private NodeStoreBranch branch;
@@ -53,14 +61,27 @@ class KernelRootBuilder extends MemoryNo
*/
private int updates = 0;
- public KernelRootBuilder(KernelNodeState base, KernelNodeStore store) {
+ KernelRootBuilder(KernelNodeState base, KernelNodeStore store) {
super(checkNotNull(base));
+ this.base = base;
this.store = store;
this.branch = store.branch(base);
}
//--------------------------------------------------< MemoryNodeBuilder >---
+
+ @Override
+ public NodeState getBaseState() {
+ return base;
+ }
+
+ @Override
+ public void reset(NodeState newBase) {
+ base = newBase;
+ super.reset(newBase);
+ }
+
@Override
protected MemoryNodeBuilder createChildBuilder(String name) {
return new KernelNodeBuilder(this, name, this);
@@ -116,7 +137,7 @@ class KernelRootBuilder extends MemoryNo
boolean move(String source, String target) {
purge();
boolean success = branch.move(source, target);
- reset(branch.getHead());
+ super.reset(branch.getHead());
return success;
}
@@ -129,13 +150,13 @@ class KernelRootBuilder extends MemoryNo
boolean copy(String source, String target) {
purge();
boolean success = branch.copy(source, target);
- reset(branch.getHead());
+ super.reset(branch.getHead());
return success;
}
private void purge() {
branch.setRoot(getNodeState());
- reset(branch.getHead());
+ super.reset(branch.getHead());
updates = 0;
}
}
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=1513924&r1=1513923&r2=1513924&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 Aug 14 15:04:23 2013
@@ -199,6 +199,20 @@ public class MemoryNodeBuilder implement
}
}
+ /**
+ * Accessor for parent builder
+ */
+ protected final MemoryNodeBuilder getParent() {
+ return parent;
+ }
+
+ /**
+ * Accoessor for name
+ */
+ protected final String getName() {
+ return name;
+ }
+
//--------------------------------------------------------< NodeBuilder >---
@Override