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/11 15:21:05 UTC
svn commit: r1466878 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
core/ kernel/ plugins/commit/ plugins/segment/ spi/state/
Author: mduerig
Date: Thu Apr 11 13:21:04 2013
New Revision: 1466878
URL: http://svn.apache.org/r1466878
Log:
OAK-709: Consider moving permission evaluation to the node state level
implement rebasing of secure node state differences on top of non secure node state giving transient changes precedence.
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/OurChangesRebaseDiff.java (contents, props changed)
- copied, changed from r1466869, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/PurgeRebaseDiff.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ConflictAnnotatingRebaseDiff.java (contents, props changed)
- copied, changed from r1466869, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RebaseDiff.java
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/PurgeRebaseDiff.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RebaseDiff.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/OurChangesRebaseDiff.java (from r1466869, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/PurgeRebaseDiff.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/OurChangesRebaseDiff.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/OurChangesRebaseDiff.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/PurgeRebaseDiff.java&r1=1466869&r2=1466878&rev=1466878&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/PurgeRebaseDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/OurChangesRebaseDiff.java Thu Apr 11 13:21:04 2013
@@ -19,84 +19,75 @@
package org.apache.jackrabbit.oak.core;
-import javax.jcr.UnsupportedRepositoryOperationException;
-
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.spi.state.AbstractRebaseDiff;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.util.TODO;
/**
- * FIXME rename, document
+ * This implementation of {@code RebaseDiff} implements a
+ * {@link org.apache.jackrabbit.oak.spi.state.NodeStateDiff},
+ * which handled conflicts by giving precedence to our changes.
+ * I.e. the changes in the {@code after} node state.
*/
-class PurgeRebaseDiff extends AbstractRebaseDiff {
- private PurgeRebaseDiff(NodeBuilder builder) {
+class OurChangesRebaseDiff extends AbstractRebaseDiff {
+ private OurChangesRebaseDiff(NodeBuilder builder) {
super(builder);
}
public static NodeState rebase(NodeState before, NodeState after, NodeBuilder builder) {
- after.compareAgainstBaseState(before, new PurgeRebaseDiff(builder));
+ after.compareAgainstBaseState(before, new OurChangesRebaseDiff(builder));
return builder.getNodeState();
}
@Override
- protected PurgeRebaseDiff createDiff(NodeBuilder builder, String name) {
- return new PurgeRebaseDiff(builder.child(name));
+ protected OurChangesRebaseDiff createDiff(NodeBuilder builder, String name) {
+ return new OurChangesRebaseDiff(builder.child(name));
}
@Override
protected void addExistingProperty(NodeBuilder builder, PropertyState after) {
- conflict();
+ builder.setProperty(after);
}
@Override
protected void changeDeletedProperty(NodeBuilder builder, PropertyState after) {
- conflict();
+ builder.setProperty(after);
}
@Override
protected void changeChangedProperty(NodeBuilder builder, PropertyState before, PropertyState after) {
- conflict();
+ builder.setProperty(after);
}
@Override
protected void deleteDeletedProperty(NodeBuilder builder, PropertyState before) {
- conflict();
+ // ignore
}
@Override
protected void deleteChangedProperty(NodeBuilder builder, PropertyState before) {
- conflict();
+ builder.removeProperty(before.getName());
}
@Override
protected void addExistingNode(NodeBuilder builder, String name, NodeState after) {
- conflict();
+ builder.setNode(name, after);
}
@Override
protected void changeDeletedNode(NodeBuilder builder, String name, NodeState after) {
- conflict();
+ builder.setNode(name, after);
}
@Override
protected void deleteDeletedNode(NodeBuilder builder, String name, NodeState before) {
- conflict();
+ // ignore
}
@Override
protected void deleteChangedNode(NodeBuilder builder, String name, NodeState before) {
- conflict();
+ builder.removeNode(name);
}
- private static void conflict() {
- // FIXME correctly handle conflict cases
- try {
- TODO.unimplemented().doNothing();
- }
- catch (UnsupportedRepositoryOperationException e) {
- throw new IllegalStateException(e);
- }
- }
}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/OurChangesRebaseDiff.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/OurChangesRebaseDiff.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java?rev=1466878&r1=1466877&r2=1466878&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/RootImpl.java Thu Apr 11 13:21:04 2013
@@ -432,7 +432,7 @@ public class RootImpl implements Root {
@Nonnull
private NodeState getRootState() {
NodeBuilder builder = branch.getHead().builder();
- return PurgeRebaseDiff.rebase(secureHead, getSecureRootState(), builder);
+ return OurChangesRebaseDiff.rebase(secureHead, getSecureRootState(), builder);
}
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java?rev=1466878&r1=1466877&r2=1466878&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java Thu Apr 11 13:21:04 2013
@@ -16,21 +16,21 @@
*/
package org.apache.jackrabbit.oak.kernel;
+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.commons.PathUtils.elements;
+import static org.apache.jackrabbit.oak.commons.PathUtils.getName;
+import static org.apache.jackrabbit.oak.commons.PathUtils.getParentPath;
+
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.api.MicroKernelException;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.state.AbstractNodeStoreBranch;
+import org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.spi.state.RebaseDiff;
-
-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.commons.PathUtils.elements;
-import static org.apache.jackrabbit.oak.commons.PathUtils.getName;
-import static org.apache.jackrabbit.oak.commons.PathUtils.getParentPath;
/**
* {@code NodeStoreBranch} based on {@link MicroKernel} branching and merging.
@@ -190,7 +190,7 @@ class KernelNodeStoreBranch extends Abst
// Nothing written to persistent branch yet
// perform rebase in memory
NodeBuilder builder = root.builder();
- getHead().compareAgainstBaseState(getBase(), new RebaseDiff(builder));
+ getHead().compareAgainstBaseState(getBase(), new ConflictAnnotatingRebaseDiff(builder));
head = builder.getNodeState();
base = root;
baseRevision = root.getRevision();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java?rev=1466878&r1=1466877&r2=1466878&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java Thu Apr 11 13:21:04 2013
@@ -16,6 +16,17 @@
*/
package org.apache.jackrabbit.oak.plugins.commit;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.ADD_EXISTING_NODE;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.ADD_EXISTING_PROPERTY;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.CHANGE_CHANGED_PROPERTY;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.CHANGE_DELETED_NODE;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.CHANGE_DELETED_PROPERTY;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.CONFLICT;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.DELETE_CHANGED_NODE;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.DELETE_CHANGED_PROPERTY;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.DELETE_DELETED_NODE;
+import static org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff.DELETE_DELETED_PROPERTY;
+
import java.util.Map;
import com.google.common.collect.ImmutableMap;
@@ -33,17 +44,6 @@ import org.apache.jackrabbit.oak.spi.sta
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.ADD_EXISTING_NODE;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.ADD_EXISTING_PROPERTY;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.CHANGE_CHANGED_PROPERTY;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.CHANGE_DELETED_NODE;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.CHANGE_DELETED_PROPERTY;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.CONFLICT;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.DELETE_CHANGED_NODE;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.DELETE_CHANGED_PROPERTY;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.DELETE_DELETED_NODE;
-import static org.apache.jackrabbit.oak.spi.state.RebaseDiff.DELETE_DELETED_PROPERTY;
-
/**
* MergingNodeStateDiff... TODO
*/
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java?rev=1466878&r1=1466877&r2=1466878&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreBranch.java Thu Apr 11 13:21:04 2013
@@ -24,9 +24,9 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.state.AbstractNodeStoreBranch;
+import org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.spi.state.RebaseDiff;
class SegmentNodeStoreBranch extends AbstractNodeStoreBranch {
@@ -72,7 +72,7 @@ class SegmentNodeStoreBranch extends Abs
if (!baseId.equals(newBaseId)) {
NodeBuilder builder =
new SegmentNodeState(store, newBaseId).builder();
- getHead().compareAgainstBaseState(getBase(), new RebaseDiff(builder));
+ getHead().compareAgainstBaseState(getBase(), new ConflictAnnotatingRebaseDiff(builder));
this.baseId = newBaseId;
this.rootId = writer.writeNode(builder.getNodeState()).getRecordId();
writer.flush();
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ConflictAnnotatingRebaseDiff.java (from r1466869, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RebaseDiff.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ConflictAnnotatingRebaseDiff.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ConflictAnnotatingRebaseDiff.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RebaseDiff.java&r1=1466869&r2=1466878&rev=1466878&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/RebaseDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ConflictAnnotatingRebaseDiff.java Thu Apr 11 13:21:04 2013
@@ -20,12 +20,12 @@ import org.apache.jackrabbit.mk.api.Micr
import org.apache.jackrabbit.oak.api.PropertyState;
/**
- * {@code RebaseDiff} implements a {@link NodeStateDiff}, which performs
- * the conflict handling as defined in {@link MicroKernel#rebase(String, String)}
+ * This implementation of {@code AbstractRebaseDiff} implements a {@link NodeStateDiff},
+ * which performs the conflict handling as defined in {@link MicroKernel#rebase(String, String)}
* on the Oak SPI state level by annotating conflicting items with conflict
* markers.
*/
-public class RebaseDiff extends AbstractRebaseDiff {
+public class ConflictAnnotatingRebaseDiff extends AbstractRebaseDiff {
public static final String CONFLICT = ":conflict";
public static final String DELETE_CHANGED_PROPERTY = "deleteChangedProperty";
public static final String DELETE_CHANGED_NODE = "deleteChangedNode";
@@ -37,13 +37,13 @@ public class RebaseDiff extends Abstract
public static final String CHANGE_DELETED_NODE = "changeDeletedNode";
public static final String DELETE_DELETED_NODE = "deleteDeletedNode";
- public RebaseDiff(NodeBuilder builder) {
+ public ConflictAnnotatingRebaseDiff(NodeBuilder builder) {
super(builder);
}
@Override
- protected RebaseDiff createDiff(NodeBuilder builder, String name) {
- return new RebaseDiff(builder.child(name));
+ protected ConflictAnnotatingRebaseDiff createDiff(NodeBuilder builder, String name) {
+ return new ConflictAnnotatingRebaseDiff(builder.child(name));
}
@Override
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ConflictAnnotatingRebaseDiff.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/ConflictAnnotatingRebaseDiff.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL