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/12/18 11:26:42 UTC
svn commit: r1551900 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
kernel/KernelRootBuilder.java plugins/mongomk/MongoRootBuilder.java
Author: mduerig
Date: Wed Dec 18 10:26:41 2013
New Revision: 1551900
URL: http://svn.apache.org/r1551900
Log:
OAK-1294: Avoid purging transient changes when rebasing branches
Change rebase implementation to rebase persisted branch followed by rebasing in memory changes on top of the head of the rebased branch.
Modified:
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/mongomk/MongoRootBuilder.java
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=1551900&r1=1551899&r2=1551900&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 Dec 18 10:26:41 2013
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff;
import org.apache.jackrabbit.oak.spi.state.NodeState;
/**
@@ -113,12 +114,19 @@ class KernelRootBuilder extends MemoryNo
* Rebase this builder on top of the head of the underlying store
*/
NodeState rebase() {
- purge();
+ NodeState head = getNodeState();
+ NodeState inMemBase = super.getBaseState();
+
+ // Rebase branch
branch.rebase();
- NodeState head = branch.getHead();
- reset(branch.getBase());
- super.reset(head);
- return head;
+
+ // Rebase in memory changes on top of the head of the rebased branch
+ super.reset(branch.getHead());
+ head.compareAgainstBaseState(inMemBase, new ConflictAnnotatingRebaseDiff(this));
+
+ // Set new base and return rebased head
+ base = branch.getBase();
+ return getNodeState();
}
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoRootBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoRootBuilder.java?rev=1551900&r1=1551899&r2=1551900&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoRootBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoRootBuilder.java Wed Dec 18 10:26:41 2013
@@ -16,11 +16,11 @@
*/
package org.apache.jackrabbit.oak.plugins.mongomk;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import java.io.IOException;
import java.io.InputStream;
-import static com.google.common.base.Preconditions.checkNotNull;
-
import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.Blob;
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff;
import org.apache.jackrabbit.oak.spi.state.NodeState;
/**
@@ -110,12 +111,19 @@ class MongoRootBuilder extends MemoryNod
* Rebase this builder on top of the head of the underlying store
*/
NodeState rebase() {
- purge();
+ NodeState head = getNodeState();
+ NodeState inMemBase = super.getBaseState();
+
+ // Rebase branch
branch.rebase();
- NodeState head = branch.getHead();
- reset(branch.getBase());
- super.reset(head);
- return head;
+
+ // Rebase in memory changes on top of the head of the rebased branch
+ super.reset(branch.getHead());
+ head.compareAgainstBaseState(inMemBase, new ConflictAnnotatingRebaseDiff(this));
+
+ // Set new base and return rebased head
+ base = branch.getBase();
+ return getNodeState();
}
/**