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 ju...@apache.org on 2012/05/09 14:38:21 UTC

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

Author: jukka
Date: Wed May  9 12:38:21 2012
New Revision: 1336143

URL: http://svn.apache.org/viewvc?rev=1336143&view=rev
Log:
OAK-68: Extension point for commit validation

Connect the commit hook so it gets called before the MK.merge() call

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

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java?rev=1336143&r1=1336142&r2=1336143&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java Wed May  9 12:38:21 2012
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.oak.commons
 import org.apache.jackrabbit.oak.plugins.memory.MemoryChildNodeEntry;
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeState;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.commit.EmptyCommitHook;
 import org.apache.jackrabbit.oak.spi.state.AbstractNodeState;
 import org.apache.jackrabbit.oak.spi.state.AbstractNodeStore;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -72,6 +73,10 @@ public class KernelNodeStore extends Abs
      */
     private KernelNodeState root;
 
+    public KernelNodeStore(MicroKernel kernel) {
+        this(kernel, new EmptyCommitHook());
+    }
+
     public KernelNodeStore(MicroKernel kernel, CommitHook commitHook) {
         this.kernel = kernel;
         this.commitHook = commitHook;
@@ -96,11 +101,9 @@ public class KernelNodeStore extends Abs
             throw new IllegalArgumentException("Alien node state");
         }
 
-        KernelNodeState kernelNodeState = (KernelNodeState) base;
-        String branchRevision = kernel.branch(kernelNodeState.getRevision());
-        String path = kernelNodeState.getPath();
-        KernelNodeState branchRoot = new KernelNodeState(kernel, valueFactory, path, branchRevision);
-        return KernelNodeStateBuilder.create(new NodeStateBuilderContext(branchRoot));
+        NodeStateBuilderContext context =
+                new NodeStateBuilderContext((KernelNodeState) base);
+        return KernelNodeStateBuilder.create(context);
     }
 
     @Override
@@ -132,7 +135,10 @@ public class KernelNodeStore extends Abs
         /** Path of the root of the whole subtree */
         private final String path;
 
-        /** Root of the subtree */
+        /** Original root of the subtree */
+        private final NodeState base;
+
+        /** Current root of the subtree */
         private NodeState root;
 
         /** Current branch revision */
@@ -141,10 +147,12 @@ public class KernelNodeStore extends Abs
         /** Pending changes */
         private StringBuilder jsop = new StringBuilder();
 
-        NodeStateBuilderContext(KernelNodeState root) {
-            this.path = root.getPath();
-            this.root = root;
-            this.revision = root.getRevision();
+        NodeStateBuilderContext(KernelNodeState base) {
+            this.base = base;
+            this.path = base.getPath();
+            this.revision = kernel.branch(base.getRevision());
+            this.root = new KernelNodeState(
+                    kernel, valueFactory, path, revision);
         }
 
         /**
@@ -288,6 +296,10 @@ public class KernelNodeStore extends Abs
         void applyPendingChanges() throws CommitFailedException {
             try {
                 purgePendingChanges();
+
+                // TODO handle potential commit changes from the hook
+                commitHook.beforeCommit(KernelNodeStore.this, base, root);
+
                 kernel.merge(revision, null);
                 revision = null;
             }