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 2012/05/23 13:30:24 UTC

svn commit: r1341834 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java

Author: mduerig
Date: Wed May 23 11:30:23 2012
New Revision: 1341834

URL: http://svn.apache.org/viewvc?rev=1341834&view=rev
Log:
OAK-100: Proper CommitHook handling in NodeStore
call CommitHook methods on commit.

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreBranch.java

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=1341834&r1=1341833&r2=1341834&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 Wed May 23 11:30:23 2012
@@ -6,6 +6,7 @@ import org.apache.jackrabbit.oak.api.Com
 import org.apache.jackrabbit.oak.api.CoreValueFactory;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
@@ -28,7 +29,6 @@ class KernelNodeStoreBranch implements N
     /** Base state of this branch */
     private final NodeState base;
 
-
     /** Revision of this branch in the Microkernel */
     private String branchRevision;
 
@@ -41,7 +41,7 @@ class KernelNodeStoreBranch implements N
     KernelNodeStoreBranch(KernelNodeStore store) {
         this.store = store;
 
-        MicroKernel kernel = getKernel();
+        MicroKernel kernel = store.getKernel();
         this.branchRevision = kernel.branch(null);
         this.currentRoot = new KernelNodeState(kernel, getValueFactory(), "/", branchRevision);
         this.base = currentRoot;
@@ -61,7 +61,7 @@ class KernelNodeStoreBranch implements N
     @Override
     public void setRoot(NodeState newRoot) {
         currentRoot = newRoot;
-        save(buildJsop());
+        commit(buildJsop());
     }
 
     @Override
@@ -80,7 +80,7 @@ class KernelNodeStoreBranch implements N
             return false;
         }
 
-        save(buildJsop() + ">\"" + source + "\":\"" + target + '"');
+        commit(">\"" + source + "\":\"" + target + '"');
         return true;
     }
 
@@ -100,34 +100,40 @@ class KernelNodeStoreBranch implements N
             return false;
         }
 
-        save(buildJsop() + "*\"" + source + "\":\"" + target + '"');
+        commit("*\"" + source + "\":\"" + target + '"');
         return true;
     }
 
     @Override
     public KernelNodeState merge() throws CommitFailedException {
-        save(buildJsop());
-        // TODO rebase, call commitHook (OAK-100)
-        MicroKernel kernel = getKernel();
-        String mergedRevision;
+        // TODO rebase to current trunk?
+        MicroKernel kernel = store.getKernel();
+        CommitHook commitHook = store.getCommitHook();
+
+        NodeState oldRoot = store.getRoot();
+        NodeState toCommit = commitHook.beforeCommit(store, oldRoot, currentRoot);
+        while (!currentRoot.equals(toCommit)) {
+            setRoot(toCommit);
+            oldRoot = store.getRoot();
+            toCommit = commitHook.beforeCommit(store, oldRoot, currentRoot);
+        }
+
         try {
-            mergedRevision = kernel.merge(branchRevision, null);
+            String mergedRevision = kernel.merge(branchRevision, null);
             branchRevision = null;
             currentRoot = null;
             committed = null;
+            KernelNodeState committed = new KernelNodeState(kernel, getValueFactory(), "/", mergedRevision);
+            commitHook.afterCommit(store, oldRoot, committed);
+            return committed;
         }
         catch (MicroKernelException e) {
             throw new CommitFailedException(e);
         }
-        return new KernelNodeState(kernel, getValueFactory(), "/", mergedRevision);
     }
 
     //------------------------------------------------------------< private >---
 
-    private MicroKernel getKernel() {
-        return store.getKernel();
-    }
-
     private CoreValueFactory getValueFactory() {
         return store.getValueFactory();
     }
@@ -144,8 +150,8 @@ class KernelNodeStoreBranch implements N
         return node;
     }
 
-    private void save(String jsop) {
-        MicroKernel kernel = getKernel();
+    private void commit(String jsop) {
+        MicroKernel kernel = store.getKernel();
         branchRevision = kernel.commit("/", jsop, branchRevision, null);
         currentRoot = new KernelNodeState(kernel, getValueFactory(), "/", branchRevision);
         committed = currentRoot;