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();
     }
 
     /**