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 2014/02/10 23:28:48 UTC

svn commit: r1566767 [1/2] - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/ oak-core/src/main/java/org/apache/jackrabbit/oak/core/ oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ oak-core/src/main/java/org/apache/j...

Author: jukka
Date: Mon Feb 10 22:28:47 2014
New Revision: 1566767

URL: http://svn.apache.org/r1566767
Log:
OAK-1387: Pass CommitInfo to commit hooks, editors and validators

Pass the CommitInfo object to commit hooks and editor/validator providers

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.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/kernel/NodeStoreKernel.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictValidatorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceEditorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreValidatorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidatorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitInfo.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeEditorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EmptyHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeStoreBranch.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStoreBranch.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardEditorProvider.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilderTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreCacheTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackupTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BlobReferenceTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ManyChildNodesTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/MergeRetryTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/CacheInvalidationIT.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdateTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditorTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CheckpointTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/ExternalBlobTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/JournalTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/MergeTest.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/HiddenNodeTest.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java
    jackrabbit/oak/trunk/oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/index/SolrIndexHookIT.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
    jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/security/GroupEditorProvider.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java Mon Feb 10 22:28:47 2014
@@ -60,6 +60,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
 import org.apache.jackrabbit.oak.spi.commit.BackgroundObserver;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
 import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
@@ -389,7 +390,8 @@ public class Oak {
         return with(new EditorProvider() {
             @Override @Nonnull
             public Editor getRootEditor(
-                    NodeState before, NodeState after, NodeBuilder builder) {
+                    NodeState before, NodeState after,
+                    NodeBuilder builder, CommitInfo info) {
                 return editor;
             }
         });

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractRoot.java Mon Feb 10 22:28:47 2014
@@ -267,7 +267,9 @@ abstract class AbstractRoot implements R
         if (path != null) {
             hooks.add(new EditorHook(new EditorProvider() {
                 @Override
-                public Editor getRootEditor(NodeState before, NodeState after, NodeBuilder builder) {
+                public Editor getRootEditor(
+                        NodeState before, NodeState after,
+                        NodeBuilder builder, CommitInfo info) {
                     return new ItemSaveValidator(path);
                 }
             }));

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=1566767&r1=1566766&r2=1566767&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 Mon Feb 10 22:28:47 2014
@@ -135,7 +135,7 @@ public class KernelNodeStoreBranch exten
 
     @Nonnull
     @Override
-    public NodeState merge(@Nonnull CommitHook hook, @Nullable CommitInfo info)
+    public NodeState merge(@Nonnull CommitHook hook, @Nonnull CommitInfo info)
             throws CommitFailedException {
         mergeLock.lock();
         try {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java Mon Feb 10 22:28:47 2014
@@ -32,6 +32,7 @@ import com.google.common.hash.HashCode;
 import com.google.common.hash.Hasher;
 import com.google.common.hash.Hashing;
 import com.google.common.io.ByteStreams;
+
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.api.MicroKernelException;
 import org.apache.jackrabbit.mk.json.JsopBuilder;
@@ -43,6 +44,7 @@ import org.apache.jackrabbit.oak.api.Typ
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.memory.AbstractBlob;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
 import org.apache.jackrabbit.oak.spi.commit.EditorHook;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
@@ -67,7 +69,7 @@ public class NodeStoreKernel implements 
             new EditorHook(new ValidatorProvider() {
                 @Override
                 protected Validator getRootValidator(
-                        NodeState before, NodeState after) {
+                        NodeState before, NodeState after, CommitInfo info) {
                     return new DefaultValidator() {
                         @Override
                         public Validator childNodeAdded(
@@ -471,7 +473,9 @@ public class NodeStoreKernel implements 
             revision = new Revision(revision, builder.getNodeState(), message);
         } else {
             try {
-                NodeState newRoot = store.merge(builder, CONFLICT_HOOK, null);
+                CommitInfo info =
+                        new CommitInfo(CommitInfo.OAK_UNKNOWN, null, message);
+                NodeState newRoot = store.merge(builder, CONFLICT_HOOK, info);
                 if (!newRoot.equals(head.root)) {
                     revision = new Revision(head, newRoot, message);
                     head = revision;
@@ -506,8 +510,10 @@ public class NodeStoreKernel implements 
         }
 
         try {
+            CommitInfo info =
+                    new CommitInfo(CommitInfo.OAK_UNKNOWN, null, message);
             NodeState newRoot =
-                    store.merge(revision.branch, CONFLICT_HOOK, null);
+                    store.merge(revision.branch, CONFLICT_HOOK, info);
             if (!newRoot.equals(head.root)) {
                 head = new Revision(head, newRoot, message);
                 revisions.put(head.id, head);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreRestore.java Mon Feb 10 22:28:47 2014
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.oak.api.Com
 import org.apache.jackrabbit.oak.plugins.segment.Journal;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.ApplyDiff;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -68,7 +69,7 @@ public class FileStoreRestore {
         NodeState after = store.getRoot();
         NodeBuilder builder = after.builder();
         source.compareAgainstBaseState(after, new ApplyDiff(builder));
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         log.debug("Restore finished in {} ms.", System.currentTimeMillis() - s);
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictHook.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictHook.java Mon Feb 10 22:28:47 2014
@@ -20,6 +20,7 @@ import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.ConflictHandler;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
@@ -46,7 +47,9 @@ public class ConflictHook implements Com
 
     @Nonnull
     @Override
-    public NodeState processCommit(NodeState before, NodeState after) throws CommitFailedException {
+    public NodeState processCommit(
+            NodeState before, NodeState after, CommitInfo info)
+            throws CommitFailedException {
         return MergingNodeStateDiff.merge(before, after, conflictHandler);
     }
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictValidatorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/ConflictValidatorProvider.java Mon Feb 10 22:28:47 2014
@@ -20,6 +20,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Service;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
@@ -33,7 +34,8 @@ import org.apache.jackrabbit.oak.spi.sta
 public class ConflictValidatorProvider extends ValidatorProvider {
 
     @Override
-    public Validator getRootValidator(NodeState before, NodeState after) {
+    public Validator getRootValidator(
+            NodeState before, NodeState after, CommitInfo info) {
         Tree rootAfter = new ImmutableTree(after);
         return new ConflictValidator(rootAfter);
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java Mon Feb 10 22:28:47 2014
@@ -22,7 +22,6 @@ import static com.google.common.base.Pre
 import static org.apache.jackrabbit.oak.api.Type.STRING;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.MISSING_NODE;
 import static org.apache.jackrabbit.oak.api.jmx.IndexStatsMBean.STATUS_DONE;
-import static org.apache.jackrabbit.oak.api.jmx.IndexStatsMBean.STATUS_INIT;
 import static org.apache.jackrabbit.oak.api.jmx.IndexStatsMBean.STATUS_RUNNING;
 
 import java.util.Calendar;
@@ -38,6 +37,7 @@ import org.apache.jackrabbit.oak.api.Typ
 import org.apache.jackrabbit.oak.api.jmx.IndexStatsMBean;
 import org.apache.jackrabbit.oak.plugins.value.Conversions;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EditorDiff;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -147,8 +147,9 @@ public class AsyncIndexUpdate implements
             try {
                 store.merge(builder, new CommitHook() {
                     @Override @Nonnull
-                    public NodeState processCommit(NodeState before,
-                            NodeState after) throws CommitFailedException {
+                    public NodeState processCommit(
+                            NodeState before, NodeState after, CommitInfo info)
+                            throws CommitFailedException {
                         // check for concurrent updates by this async task
                         PropertyState stateAfterRebase = before
                                 .getChildNode(ASYNC).getProperty(name);
@@ -159,7 +160,7 @@ public class AsyncIndexUpdate implements
                             throw CONCURRENT_UPDATE;
                         }
                     }
-                }, null);
+                }, CommitInfo.EMPTY);
             } catch (CommitFailedException e) {
                 if (e != CONCURRENT_UPDATE) {
                     exception = e;
@@ -184,7 +185,7 @@ public class AsyncIndexUpdate implements
             AsyncIndexStats stats) throws CommitFailedException {
         NodeBuilder builder = store.getRoot().builder();
         preAsyncRunStatus(builder, stats);
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
     private static boolean isAlreadyRunning(NodeStore store) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java Mon Feb 10 22:28:47 2014
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugin
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -50,7 +51,8 @@ public class IndexUpdateProvider impleme
 
     @Override @CheckForNull
     public Editor getRootEditor(
-            NodeState before, NodeState after, NodeBuilder builder) {
+            NodeState before, NodeState after,
+            NodeBuilder builder, CommitInfo info) {
         return new IndexUpdate(provider, async, after, builder, NOOP_CALLBACK);
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java Mon Feb 10 22:28:47 2014
@@ -21,6 +21,7 @@ import static com.google.common.base.Pre
 import static com.google.common.base.Preconditions.checkState;
 import static com.google.common.collect.Maps.newHashMap;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
+import static org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState.squeeze;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -207,11 +208,13 @@ public class MemoryNodeStore implements 
 
         @Override
         public NodeState merge(
-                @Nonnull CommitHook hook, @Nullable CommitInfo info)
+                @Nonnull CommitHook hook, @Nonnull CommitInfo info)
                 throws CommitFailedException {
+            checkNotNull(hook);
+            checkNotNull(info);
             // TODO: rebase();
             checkNotMerged();
-            NodeState merged = ModifiedNodeState.squeeze(checkNotNull(hook).processCommit(base, root));
+            NodeState merged = squeeze(hook.processCommit(base, root, info));
             store.root.set(merged);
             root = null; // Mark as merged
             return merged;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java Mon Feb 10 22:28:47 2014
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
 
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
@@ -39,7 +40,8 @@ import static org.apache.jackrabbit.oak.
 public class NameValidatorProvider extends ValidatorProvider {
 
     @Override
-    public Validator getRootValidator(NodeState before, NodeState after) {
+    public Validator getRootValidator(
+            NodeState before, NodeState after, CommitInfo info) {
         return new NameValidator(newHashSet(after
                 .getChildNode(JCR_SYSTEM)
                 .getChildNode(REP_NAMESPACES)

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceEditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceEditorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceEditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceEditorProvider.java Mon Feb 10 22:28:47 2014
@@ -22,6 +22,7 @@ import static org.apache.jackrabbit.oak.
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
 import org.apache.jackrabbit.oak.spi.commit.SubtreeEditor;
@@ -38,8 +39,9 @@ import org.apache.jackrabbit.oak.spi.sta
 public class NamespaceEditorProvider implements EditorProvider {
 
     @Override
-    public Editor getRootEditor(NodeState before, NodeState after,
-            NodeBuilder builder) throws CommitFailedException {
+    public Editor getRootEditor(
+            NodeState before, NodeState after, NodeBuilder builder,
+            CommitInfo info) throws CommitFailedException {
         return new SubtreeEditor(new NamespaceEditor(before, builder), JCR_SYSTEM, REP_NAMESPACES);
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/TypeEditorProvider.java Mon Feb 10 22:28:47 2014
@@ -29,6 +29,7 @@ import java.util.Set;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.commit.EditorDiff;
 import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
@@ -42,8 +43,8 @@ public class TypeEditorProvider implemen
 
     @Override
     public Editor getRootEditor(
-            NodeState before, NodeState after, NodeBuilder builder)
-            throws CommitFailedException {
+            NodeState before, NodeState after, NodeBuilder builder,
+            CommitInfo info) throws CommitFailedException {
         NodeState beforeTypes =
                 before.getChildNode(JCR_SYSTEM).getChildNode(JCR_NODE_TYPES);
         NodeState afterTypes =

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java Mon Feb 10 22:28:47 2014
@@ -251,13 +251,13 @@ public class SegmentNodeStore implements
         private final CommitInfo info;
 
         Commit(@Nonnull SegmentNodeBuilder builder,
-                @Nonnull CommitHook hook, @Nullable CommitInfo info) {
+                @Nonnull CommitHook hook, @Nonnull CommitInfo info) {
             checkNotNull(builder);
             this.before = builder.getBaseState();
             this.after = builder.getNodeState();
 
             this.hook = checkNotNull(hook);
-            this.info = info;
+            this.info = checkNotNull(info);
         }
 
         private boolean setHead(SegmentNodeBuilder builder) {
@@ -280,7 +280,8 @@ public class SegmentNodeStore implements
             SegmentNodeBuilder builder = state.builder();
             if (fastEquals(before, state.getChildNode(ROOT))) {
                 // use a shortcut when there are no external changes
-                builder.setChildNode(ROOT, hook.processCommit(before, after));
+                builder.setChildNode(
+                        ROOT, hook.processCommit(before, after, info));
             } else {
                 // there were some external changes, so do the full rebase
                 ConflictAnnotatingRebaseDiff diff =
@@ -289,7 +290,8 @@ public class SegmentNodeStore implements
                 // apply commit hooks on the rebased changes
                 builder.setChildNode(ROOT, hook.processCommit(
                         builder.getBaseState().getChildNode(ROOT),
-                        builder.getNodeState().getChildNode(ROOT)));
+                        builder.getNodeState().getChildNode(ROOT),
+                        info));
             }
             return builder;
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionEditorProvider.java Mon Feb 10 22:28:47 2014
@@ -21,6 +21,7 @@ import static org.apache.jackrabbit.oak.
 
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.CompositeEditor;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
@@ -33,8 +34,9 @@ import org.apache.jackrabbit.oak.spi.sta
 public class VersionEditorProvider implements EditorProvider {
 
     @Override
-    public Editor getRootEditor(NodeState before, NodeState after,
-            NodeBuilder builder) {
+    public Editor getRootEditor(
+            NodeState before, NodeState after,
+            NodeBuilder builder, CommitInfo info) {
         if (!builder.hasChildNode(JCR_SYSTEM)) {
             return null;
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java Mon Feb 10 22:28:47 2014
@@ -18,9 +18,11 @@ package org.apache.jackrabbit.oak.plugin
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.annotation.Nonnull;
 
 import com.google.common.collect.ImmutableSet;
+
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
@@ -30,6 +32,7 @@ import org.apache.jackrabbit.oak.commons
 import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
 import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.state.DefaultNodeStateDiff;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -52,7 +55,9 @@ public class VersionablePathHook impleme
 
     @Nonnull
     @Override
-    public NodeState processCommit(final NodeState before, NodeState after) throws CommitFailedException {
+    public NodeState processCommit(
+            NodeState before, NodeState after, CommitInfo info)
+            throws CommitFailedException {
         NodeBuilder rootBuilder = after.builder();
         NodeBuilder vsRoot = rootBuilder.child(NodeTypeConstants.JCR_SYSTEM).child(NodeTypeConstants.JCR_VERSIONSTORAGE);
         ReadWriteVersionManager vMgr = new ReadWriteVersionManager(vsRoot, rootBuilder);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java Mon Feb 10 22:28:47 2014
@@ -23,6 +23,7 @@ import org.apache.jackrabbit.oak.api.Roo
 import org.apache.jackrabbit.oak.core.ImmutableRoot;
 import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
@@ -49,7 +50,8 @@ public class AccessControlValidatorProvi
     //--------------------------------------------------< ValidatorProvider >---
     @Nonnull
     @Override
-    public Validator getRootValidator(NodeState before, NodeState after) {
+    public Validator getRootValidator(
+            NodeState before, NodeState after, CommitInfo info) {
         ImmutableTree rootAfter = new ImmutableTree(after);
 
         RestrictionProvider restrictionProvider = getConfig(AuthorizationConfiguration.class).getRestrictionProvider();

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionHook.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionHook.java Mon Feb 10 22:28:47 2014
@@ -34,6 +34,7 @@ import org.apache.jackrabbit.oak.api.Typ
 import org.apache.jackrabbit.oak.core.ImmutableRoot;
 import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
 import org.apache.jackrabbit.oak.plugins.nodetype.TypePredicate;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.PostValidationHook;
 import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
 import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionConstants;
@@ -105,7 +106,9 @@ public class PermissionHook implements P
 
     @Nonnull
     @Override
-    public NodeState processCommit(final NodeState before, NodeState after) throws CommitFailedException {
+    public NodeState processCommit(
+            NodeState before, NodeState after, CommitInfo info)
+            throws CommitFailedException {
         NodeBuilder rootAfter = after.builder();
 
         permissionRoot = getPermissionRoot(rootAfter);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreValidatorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreValidatorProvider.java Mon Feb 10 22:28:47 2014
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.securi
 
 import javax.annotation.Nonnull;
 
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.FailingValidator;
 import org.apache.jackrabbit.oak.spi.commit.SubtreeValidator;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
@@ -34,7 +35,8 @@ public class PermissionStoreValidatorPro
 
     @Nonnull
     @Override
-    public Validator getRootValidator(NodeState before, NodeState after) {
+    public Validator getRootValidator(
+            NodeState before, NodeState after, CommitInfo info) {
         FailingValidator validator = new FailingValidator(
                 "Constraint", 41, "Attempt to modify permission store.");
         return new SubtreeValidator(validator, JCR_SYSTEM, REP_PERMISSION_STORE);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java Mon Feb 10 22:28:47 2014
@@ -18,10 +18,12 @@ package org.apache.jackrabbit.oak.securi
 
 import java.security.Principal;
 import java.util.Set;
+
 import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.core.ImmutableRoot;
 import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.MoveTracker;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
@@ -66,9 +68,10 @@ public class PermissionValidatorProvider
     }
 
     //--------------------------------------------------< ValidatorProvider >---
-    @Nonnull
-    @Override
-    public Validator getRootValidator(NodeState before, NodeState after) {
+
+    @Override @Nonnull
+    public Validator getRootValidator(
+            NodeState before, NodeState after, CommitInfo info) {
         PermissionProvider pp = acConfig.getPermissionProvider(new ImmutableRoot(before), workspaceName, principals);
 
         ImmutableTree rootBefore = new ImmutableTree(before);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/JcrAllCommitHook.java Mon Feb 10 22:28:47 2014
@@ -21,6 +21,7 @@ import javax.annotation.Nonnull;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.PostValidationHook;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
@@ -38,7 +39,9 @@ class JcrAllCommitHook implements PostVa
 
     @Nonnull
     @Override
-    public NodeState processCommit(NodeState before, NodeState after) throws CommitFailedException {
+    public NodeState processCommit(
+            NodeState before, NodeState after, CommitInfo info)
+            throws CommitFailedException {
         NodeBuilder builder = after.builder();
         after.compareAgainstBaseState(before, new PrivilegeDiff(null, null, builder));
         return builder.getNodeState();

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java Mon Feb 10 22:28:47 2014
@@ -20,6 +20,7 @@ import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.core.ImmutableRoot;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.SubtreeValidator;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
@@ -37,7 +38,8 @@ class PrivilegeValidatorProvider extends
 
     @Nonnull
     @Override
-    public Validator getRootValidator(NodeState before, NodeState after) {
+    public Validator getRootValidator(
+            NodeState before, NodeState after, CommitInfo info) {
         return new SubtreeValidator(new PrivilegeValidator(createRoot(before), createRoot(after)),
                 JCR_SYSTEM, REP_PRIVILEGES);
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidatorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidatorProvider.java Mon Feb 10 22:28:47 2014
@@ -20,6 +20,7 @@ import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.core.ImmutableRoot;
 import org.apache.jackrabbit.oak.plugins.tree.ImmutableTree;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
@@ -41,9 +42,10 @@ class UserValidatorProvider extends Vali
     }
 
     //--------------------------------------------------< ValidatorProvider >---
-    @Nonnull
-    @Override
-    public Validator getRootValidator(NodeState before, NodeState after) {
+
+    @Override @Nonnull
+    public Validator getRootValidator(
+            NodeState before, NodeState after, CommitInfo info) {
         membershipProvider = new MembershipProvider(new ImmutableRoot(after), config);
         return new UserValidator(new ImmutableTree(before), new ImmutableTree(after), this);
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitHook.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitHook.java Mon Feb 10 22:28:47 2014
@@ -45,11 +45,12 @@ public interface CommitHook {
      *
      * @param before content tree before the commit
      * @param after content tree prepared for the commit
+     * @param info metadata associated with this commit
      * @return content tree to be committed
      * @throws CommitFailedException if the commit should be rejected
      */
     @Nonnull
-    NodeState processCommit(NodeState before, NodeState after)
+    NodeState processCommit(NodeState before, NodeState after, CommitInfo info)
         throws CommitFailedException;
 
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitInfo.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitInfo.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CommitInfo.java Mon Feb 10 22:28:47 2014
@@ -34,6 +34,13 @@ public final class CommitInfo {
 
     public static final String OAK_UNKNOWN = "oak:unknown";
 
+    /**
+     * Empty commit information object. Used as a dummy object when no
+     * metadata is known (or needed) about a commit.
+     */
+    public static final CommitInfo EMPTY =
+            new CommitInfo(OAK_UNKNOWN, OAK_UNKNOWN, null);
+
     private final String sessionId;
 
     private final String userId;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeEditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeEditorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeEditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeEditorProvider.java Mon Feb 10 22:28:47 2014
@@ -40,7 +40,8 @@ public class CompositeEditorProvider imp
         new EditorProvider() {
             @Override @CheckForNull
             public Editor getRootEditor(
-                    NodeState before, NodeState after, NodeBuilder builder) {
+                    NodeState before, NodeState after,
+                    NodeBuilder builder, CommitInfo info) {
                 return null;
             }
         };
@@ -72,11 +73,11 @@ public class CompositeEditorProvider imp
 
     @Override @CheckForNull
     public Editor getRootEditor(
-            NodeState before, NodeState after, NodeBuilder builder)
-            throws CommitFailedException {
+            NodeState before, NodeState after, NodeBuilder builder,
+            CommitInfo info) throws CommitFailedException {
         List<Editor> list = Lists.newArrayListWithCapacity(providers.size());
         for (EditorProvider provider : providers) {
-            Editor editor = provider.getRootEditor(before, after, builder);
+            Editor editor = provider.getRootEditor(before, after, builder, info);
             if (editor != null) {
                 list.add(editor);
             }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeHook.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/CompositeHook.java Mon Feb 10 22:28:47 2014
@@ -52,11 +52,12 @@ public class CompositeHook implements Co
     }
 
     @Override
-    public NodeState processCommit(NodeState before, NodeState after)
+    public NodeState processCommit(
+            NodeState before, NodeState after, CommitInfo info)
             throws CommitFailedException {
         NodeState newState = after;
         for (CommitHook hook : hooks) {
-            newState = hook.processCommit(before, newState);
+            newState = hook.processCommit(before, newState, info);
         }
         return newState;
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorHook.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorHook.java Mon Feb 10 22:28:47 2014
@@ -43,12 +43,14 @@ public class EditorHook implements Commi
 
     @Override @Nonnull
     public NodeState processCommit(
-            @Nonnull NodeState before, @Nonnull NodeState after)
-            throws CommitFailedException {
+            @Nonnull NodeState before, @Nonnull NodeState after,
+            @Nonnull CommitInfo info) throws CommitFailedException {
         checkNotNull(before);
         checkNotNull(after);
+        checkNotNull(info);
+
         NodeBuilder builder = after.builder();
-        Editor editor = provider.getRootEditor(before, after, builder);
+        Editor editor = provider.getRootEditor(before, after, builder, info);
         CommitFailedException exception =
                 EditorDiff.process(editor, before, after);
         if (exception == null) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EditorProvider.java Mon Feb 10 22:28:47 2014
@@ -46,11 +46,13 @@ public interface EditorProvider {
      * @param before  original root state
      * @param after   modified root state
      * @param builder node builder based on the after state
+     * @param info    metadata associated with this commit
      * @return editor for processing the changes, or {@code null}
      * @throws CommitFailedException if processing failed
      */
     @CheckForNull
-    Editor getRootEditor(NodeState before, NodeState after, NodeBuilder builder)
+    Editor getRootEditor(
+        NodeState before, NodeState after, NodeBuilder builder, CommitInfo info)
         throws CommitFailedException;
 
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EmptyHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EmptyHook.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EmptyHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/EmptyHook.java Mon Feb 10 22:28:47 2014
@@ -42,7 +42,8 @@ public class EmptyHook implements Commit
     public static final CommitHook INSTANCE = new EmptyHook();
 
     @Override
-    public NodeState processCommit(NodeState before, NodeState after)
+    public NodeState processCommit(
+            NodeState before, NodeState after, CommitInfo info)
             throws CommitFailedException {
         return after;
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ValidatorProvider.java Mon Feb 10 22:28:47 2014
@@ -36,18 +36,20 @@ public abstract class ValidatorProvider 
      *
      * @param before original root state
      * @param after  modified root state
+     * @param info   metadata about this commit
      * @return validator for checking the modifications
      */
     @Nonnull
     protected abstract Validator getRootValidator(
-            NodeState before, NodeState after);
+            NodeState before, NodeState after, CommitInfo info);
 
     //----------------------------------------------------< EditorProvider >--
 
     @Override @Nonnull
     public final Editor getRootEditor(
-            NodeState before, NodeState after, NodeBuilder builder) {
-        return getRootValidator(before, after);
+            NodeState before, NodeState after,
+            NodeBuilder builder, CommitInfo info) {
+        return getRootValidator(before, after, info);
     }
 
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/lifecycle/OakInitializer.java Mon Feb 10 22:28:47 2014
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.oak.api.Com
 import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EditorHook;
 import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -41,7 +42,8 @@ public final class OakInitializer {
             NodeBuilder builder = store.getRoot().builder();
             initializer.initialize(builder);
             CommitHook hook = new EditorHook(new IndexUpdateProvider(indexEditor));
-            store.merge(builder, hook, null);
+            CommitInfo info = new CommitInfo("OakInitializer", null, null);
+            store.merge(builder, hook, info);
         } catch (CommitFailedException e) {
             throw new RuntimeException(e);
         }
@@ -59,7 +61,8 @@ public final class OakInitializer {
         }
         try {
             CommitHook hook = new EditorHook(new IndexUpdateProvider(indexEditor));
-            store.merge(builder, hook, null);
+            CommitInfo info = new CommitInfo("OakInitializer", null, null);
+            store.merge(builder, hook, info);
         } catch (CommitFailedException e) {
             throw new RuntimeException(e);
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeStoreBranch.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeStoreBranch.java Mon Feb 10 22:28:47 2014
@@ -28,7 +28,6 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.commons.PathUtils.getParentPath;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.commons.PathUtils;
@@ -259,7 +258,7 @@ public abstract class AbstractNodeStoreB
 
     @Nonnull
     @Override
-    public NodeState merge(@Nonnull CommitHook hook, @Nullable CommitInfo info)
+    public NodeState merge(@Nonnull CommitHook hook, @Nonnull CommitInfo info)
             throws CommitFailedException {
         CommitFailedException ex = null;
         for (long backoff = 100; backoff < maximumBackoff; backoff *= 2) {
@@ -272,7 +271,7 @@ public abstract class AbstractNodeStoreB
                 }
             }
             try {
-                return branchState.merge(checkNotNull(hook), info);
+                return branchState.merge(checkNotNull(hook), checkNotNull(info));
             } catch (CommitFailedException e) {
                 ex = e;
                 // only retry on merge failures. these may be caused by
@@ -353,7 +352,8 @@ public abstract class AbstractNodeStoreB
          *          indicate the cause of the exception.
          */
         @Nonnull
-        abstract NodeState merge(@Nonnull CommitHook hook, @Nullable CommitInfo info)
+        abstract NodeState merge(
+                @Nonnull CommitHook hook, @Nonnull CommitInfo info)
                 throws CommitFailedException;
     }
 
@@ -397,7 +397,7 @@ public abstract class AbstractNodeStoreB
 
         @Override
         @Nonnull
-        NodeState merge(@Nonnull CommitHook hook, CommitInfo info) {
+        NodeState merge(@Nonnull CommitHook hook, @Nonnull CommitInfo info) {
             branchState = new Merged(base);
             return base;
         }
@@ -456,12 +456,14 @@ public abstract class AbstractNodeStoreB
 
         @Override
         @Nonnull
-        NodeState merge(@Nonnull CommitHook hook, CommitInfo info)
+        NodeState merge(@Nonnull CommitHook hook, @Nonnull CommitInfo info)
                 throws CommitFailedException {
+            checkNotNull(hook);
+            checkNotNull(info);
             try {
                 rebase();
                 dispatcher.contentChanged(base, null);
-                NodeState toCommit = checkNotNull(hook).processCommit(base, head);
+                NodeState toCommit = hook.processCommit(base, head, info);
                 try {
                     NodeState newHead = AbstractNodeStoreBranch.this.persist(toCommit, base, info);
                     dispatcher.contentChanged(newHead, info);
@@ -543,12 +545,12 @@ public abstract class AbstractNodeStoreB
 
         @Override
         @Nonnull
-        NodeState merge(@Nonnull CommitHook hook, CommitInfo info)
+        NodeState merge(@Nonnull CommitHook hook, @Nonnull CommitInfo info)
                 throws CommitFailedException {
             try {
                 rebase();
                 dispatcher.contentChanged(base, null);
-                NodeState toCommit = checkNotNull(hook).processCommit(base, head);
+                NodeState toCommit = checkNotNull(hook).processCommit(base, head, info);
                 N newRoot = AbstractNodeStoreBranch.this.persist(toCommit, head, info);
                 boolean success = false;
                 try {
@@ -612,7 +614,7 @@ public abstract class AbstractNodeStoreB
 
         @Override
         @Nonnull
-        NodeState merge(@Nonnull CommitHook hook, CommitInfo info) {
+        NodeState merge(@Nonnull CommitHook hook, @Nonnull CommitInfo info) {
             throw new IllegalStateException("Branch has already been merged");
         }
     }
@@ -659,7 +661,7 @@ public abstract class AbstractNodeStoreB
          */
         @Nonnull
         @Override
-        NodeState merge(@Nonnull CommitHook hook, @Nullable CommitInfo info)
+        NodeState merge(@Nonnull CommitHook hook, @Nonnull CommitInfo info)
                 throws CommitFailedException {
             throw ex;
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStore.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStore.java Mon Feb 10 22:28:47 2014
@@ -52,8 +52,7 @@ public interface NodeStore {
      *
      * @param builder  the builder whose changes to apply
      * @param commitHook the commit hook to apply while merging changes
-     * @param info commit info associated with this merge operation,
-     *             or {@code null} if no local commit information is available
+     * @param info commit info associated with this merge operation
      * @return the node state resulting from the merge.
      * @throws CommitFailedException if the merge failed
      * @throws IllegalArgumentException if the builder is not acquired
@@ -62,7 +61,7 @@ public interface NodeStore {
     @Nonnull
     NodeState merge(
             @Nonnull NodeBuilder builder, @Nonnull CommitHook commitHook,
-            @Nullable CommitInfo info) throws CommitFailedException;
+            @Nonnull CommitInfo info) throws CommitFailedException;
 
     /**
      * Rebase the changes in the passed {@code builder} on top of the current root state.

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStoreBranch.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeStoreBranch.java Mon Feb 10 22:28:47 2014
@@ -67,14 +67,13 @@ public interface NodeStoreBranch {
      * the current head revision followed by a fast forward merge.
      *
      * @param hook the commit hook to apply while merging changes
-     * @param info commit info associated with this merge operation,
-     *             or {@code null} if no local commit information is available
+     * @param info commit info associated with this merge operation
      * @return the node state resulting from the merge.
      * @throws CommitFailedException if the merge failed
      * @throws IllegalStateException if the branch is already merged
      */
     @Nonnull
-    NodeState merge(@Nonnull CommitHook hook, @Nullable CommitInfo info)
+    NodeState merge(@Nonnull CommitHook hook, @Nonnull CommitInfo info)
             throws CommitFailedException;
 
     /**

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardEditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardEditorProvider.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardEditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardEditorProvider.java Mon Feb 10 22:28:47 2014
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.spi.wh
 import javax.annotation.CheckForNull;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
@@ -44,10 +45,11 @@ public class WhiteboardEditorProvider
     @Override
     @CheckForNull
     public Editor getRootEditor(
-            NodeState before, NodeState after, NodeBuilder builder)
-            throws CommitFailedException {
+            NodeState before, NodeState after, NodeBuilder builder,
+            CommitInfo info) throws CommitFailedException {
         EditorProvider provider =
                 CompositeEditorProvider.compose(getServices());
-        return provider.getRootEditor(before, after, builder);
+        return provider.getRootEditor(before, after, builder, info);
     }
+
 }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilderTest.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeBuilderTest.java Mon Feb 10 22:28:47 2014
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertEqu
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -83,13 +84,13 @@ public class KernelNodeBuilderTest {
     private static void modify(NodeStore store) throws CommitFailedException {
         NodeBuilder root = store.getRoot().builder();
         root.setChildNode("added");
-        store.merge(root, EmptyHook.INSTANCE, null);
+        store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
     private static void init(NodeStore store) throws CommitFailedException {
         NodeBuilder builder = store.getRoot().builder();
         builder.child("x").child("y").child("z");
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
     private static void run(NodeStore store) throws CommitFailedException {
@@ -111,7 +112,7 @@ public class KernelNodeBuilderTest {
         assertFalse("child node x/y/z not should not be present", builder
                 .child("x").child("y").hasChildNode("z"));
 
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
 }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStateTest.java Mon Feb 10 22:28:47 2014
@@ -32,6 +32,7 @@ import java.util.List;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -57,8 +58,8 @@ public class KernelNodeStateTest {
         builder.child("y");
         builder.child("z");
 
-        state = store.merge(builder, EmptyHook.INSTANCE, null);
-        state = store.merge(builder, EmptyHook.INSTANCE, null);
+        state = store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+        state = store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
     @After

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreCacheTest.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreCacheTest.java Mon Feb 10 22:28:47 2014
@@ -28,6 +28,7 @@ import javax.annotation.Nonnull;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mk.api.MicroKernelException;
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -60,7 +61,7 @@ public class KernelNodeStoreCacheTest {
         b.child("c");
         b.child("d");
         b.child("e");
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
     /**
@@ -141,7 +142,7 @@ public class KernelNodeStoreCacheTest {
     private void modifyContent() throws Exception {
         NodeBuilder builder = store.getRoot().builder();
         builder.child("a").setProperty("foo", "bar");
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
     private void readTree(NodeState root) {

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/LargeKernelNodeStateTest.java Mon Feb 10 22:28:47 2014
@@ -24,6 +24,7 @@ import static junit.framework.Assert.ass
 
 import org.apache.jackrabbit.mk.core.MicroKernelImpl;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -49,7 +50,7 @@ public class LargeKernelNodeStateTest {
             builder.child("x" + i);
         }
 
-        state = store.merge(builder, EmptyHook.INSTANCE, null);
+        state = store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
     @After

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java Mon Feb 10 22:28:47 2014
@@ -93,7 +93,7 @@ public class NodeStoreTest {
         test.child("x");
         test.child("y");
         test.child("z");
-        root = store.merge(builder, EmptyHook.INSTANCE, null);
+        root = store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
     @After
@@ -136,7 +136,7 @@ public class NodeStoreTest {
         assertFalse(testState.getChildNode("newNode").exists());
         assertTrue(testState.getChildNode("x").exists());
 
-        store.merge(rootBuilder, EmptyHook.INSTANCE, null);
+        store.merge(rootBuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         // Assert changes are present in the trunk
         testState = store.getRoot().getChildNode("test");
@@ -172,7 +172,7 @@ public class NodeStoreTest {
         newNodeBuilder.setProperty("n", 42);
         testBuilder.getChildNode("a").remove();
 
-        store.merge(rootBuilder, EmptyHook.INSTANCE, null);
+        store.merge(rootBuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         NodeState newRoot = store.getRoot(); // triggers the observer
         latch.await(2, TimeUnit.SECONDS);
 
@@ -197,13 +197,14 @@ public class NodeStoreTest {
 
         store.merge(rootBuilder, new CommitHook() {
             @Override
-            public NodeState processCommit(NodeState before, NodeState after) {
+            public NodeState processCommit(
+                    NodeState before, NodeState after, CommitInfo info) {
                 NodeBuilder rootBuilder = after.builder();
                 NodeBuilder testBuilder = rootBuilder.child("test");
                 testBuilder.child("fromHook");
                 return rootBuilder.getNodeState();
             }
-        }, null);
+        }, CommitInfo.EMPTY);
 
         NodeState test = store.getRoot().getChildNode("test");
         assertTrue(test.getChildNode("newNode").exists());
@@ -220,13 +221,13 @@ public class NodeStoreTest {
         for (int i = 0; i <= KernelNodeState.MAX_CHILD_NODE_NAMES; i++) {
             parent.child("child-" + i);
         }
-        store.merge(root, EmptyHook.INSTANCE, null);
+        store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         NodeState base = store.getRoot();
         root = base.builder();
         parent = root.child("parent");
         parent.child("child-new");
-        store.merge(root, EmptyHook.INSTANCE, null);
+        store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         Diff diff = new Diff();
         store.getRoot().compareAgainstBaseState(base, diff);
@@ -239,7 +240,7 @@ public class NodeStoreTest {
         root = base.builder();
         parent = root.getChildNode("parent");
         parent.getChildNode("child-new").moveTo(parent, "child-moved");
-        store.merge(root, EmptyHook.INSTANCE, null);
+        store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         diff = new Diff();
         store.getRoot().compareAgainstBaseState(base, diff);
@@ -255,7 +256,7 @@ public class NodeStoreTest {
         parent.child("child-moved").setProperty("foo", "value");
         parent.child("child-moved").setProperty(
                 new MultiStringPropertyState("bar", Arrays.asList("value")));
-        store.merge(root, EmptyHook.INSTANCE, null);
+        store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         diff = new Diff();
         store.getRoot().compareAgainstBaseState(base, diff);
@@ -272,7 +273,7 @@ public class NodeStoreTest {
         parent.setProperty("foo", "value");
         parent.setProperty(new MultiStringPropertyState(
                 "bar", Arrays.asList("value")));
-        store.merge(root, EmptyHook.INSTANCE, null);
+        store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         diff = new Diff();
         store.getRoot().compareAgainstBaseState(base, diff);
@@ -287,7 +288,7 @@ public class NodeStoreTest {
         root = base.builder();
         parent = root.child("parent");
         parent.getChildNode("child-moved").remove();
-        store.merge(root, EmptyHook.INSTANCE, null);
+        store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         diff = new Diff();
         store.getRoot().compareAgainstBaseState(base, diff);
@@ -409,7 +410,7 @@ public class NodeStoreTest {
     private static NodeStore init(NodeStore store) throws CommitFailedException {
         NodeBuilder builder = store.getRoot().builder();
         builder.setChildNode("root");
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         return store;
     }
 
@@ -423,11 +424,11 @@ public class NodeStoreTest {
         builder1.setChildNode("node1");
         builder2.setChildNode("node2");
 
-        store.merge(builder1, EmptyHook.INSTANCE, null);
+        store.merge(builder1, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         assertTrue(store.getRoot().hasChildNode("node1"));
         assertFalse(store.getRoot().hasChildNode("node2"));
 
-        store.merge(builder2, EmptyHook.INSTANCE, null);
+        store.merge(builder2, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         assertTrue(store.getRoot().hasChildNode("node1"));
         assertTrue(store.getRoot().hasChildNode("node2"));
     }
@@ -455,23 +456,25 @@ public class NodeStoreTest {
         // commit something in between to force rebase
         NodeBuilder b = store.getRoot().builder();
         b.child("bar");
-        store.merge(b, EmptyHook.INSTANCE, null);
+        store.merge(b, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         try {
             store.merge(rootBuilder, new CommitHook() {
                 @Nonnull
                 @Override
-                public NodeState processCommit(NodeState before, NodeState after)
+                public NodeState processCommit(
+                        NodeState before, NodeState after, CommitInfo info)
                         throws CommitFailedException {
                     throw new CommitFailedException("", 0, "commit rejected");
                 }
-            }, null);
+            }, CommitInfo.EMPTY);
             fail("must throw CommitFailedException");
         } catch (CommitFailedException e) {
             // expected
         }
         // merge again
-        NodeState root = store.merge(rootBuilder, EmptyHook.INSTANCE, null);
+        NodeState root = store.merge(
+                rootBuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         assertTrue(root.hasChildNode("bar"));
     }
 
@@ -483,7 +486,7 @@ public class NodeStoreTest {
         }
 
         builder.child("foo").child(":bar").child("quz").setProperty("p", "v");
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         NodeState after = store.getRoot();
         Diff diff = new Diff();

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackupTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackupTest.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackupTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/backup/FileStoreBackupTest.java Mon Feb 10 22:28:47 2014
@@ -34,6 +34,7 @@ import org.apache.jackrabbit.oak.api.Com
 import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
 import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
 import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -105,7 +106,7 @@ public class FileStoreBackupTest {
         NodeBuilder builder = store.getRoot().builder();
         builder.child("test-backup");
         builder.child("root"); // make sure we don't backup the super-root
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
     private static void compare(NodeStore store, File destination)
@@ -134,7 +135,7 @@ public class FileStoreBackupTest {
         c1.setProperty("blob", blob);
         NodeBuilder c2 = builder.child("test-backup2");
         c2.setProperty("blob", blob);
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         FileStoreBackup.backup(store, destination);
         compare(store, destination);

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BlobReferenceTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BlobReferenceTest.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BlobReferenceTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BlobReferenceTest.java Mon Feb 10 22:28:47 2014
@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.Random;
 
 import org.apache.jackrabbit.oak.api.Blob;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.junit.Test;
@@ -44,7 +45,7 @@ public class BlobReferenceTest {
             set.add(b.toString());
             a.child("c" + i).setProperty("x", b);
         }
-        s.merge(a, EmptyHook.INSTANCE, null);
+        s.merge(a, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         Iterator<Blob> it = s.getReferencedBlobsIterator();
         while (it.hasNext()) {
             Blob b = it.next();

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java?rev=1566767&r1=1566766&r2=1566767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreTest.java Mon Feb 10 22:28:47 2014
@@ -28,6 +28,7 @@ import javax.annotation.Nonnull;
 import org.apache.jackrabbit.oak.kernel.KernelNodeState;
 import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.util.TimingDocumentStoreWrapper;
+import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -62,7 +63,7 @@ public class DocumentNodeStoreTest {
 
         NodeBuilder builder = store2.getRoot().builder();
         builder.child("node2");
-        store2.merge(builder, EmptyHook.INSTANCE, null);
+        store2.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         // force update of _lastRevs
         store2.runBackgroundOperations();
 
@@ -71,7 +72,8 @@ public class DocumentNodeStoreTest {
 
         builder = store1.getRoot().builder();
         builder.child("node1");
-        NodeState root = store1.merge(builder, EmptyHook.INSTANCE, null);
+        NodeState root =
+                store1.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
 
         semaphore.acquireUninterruptibly();
         Thread t = new Thread(new Runnable() {
@@ -114,12 +116,12 @@ public class DocumentNodeStoreTest {
             children.add(name);
             builder.child(name);
         }
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         builder = store.getRoot().builder();
         String name = new ArrayList<String>(children).get(
                 KernelNodeState.MAX_CHILD_NODE_NAMES / 2);
         builder.child(name).remove();
-        store.merge(builder, EmptyHook.INSTANCE, null);
+        store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         int numEntries = Iterables.size(store.getRoot().getChildNodeEntries());
         assertEquals(max - 1, numEntries);
         store.dispose();
@@ -145,7 +147,7 @@ public class DocumentNodeStoreTest {
         for (int i = 0; i < 10; i++) {
             root.child("node-" + i);
         }
-        store.merge(root, EmptyHook.INSTANCE, null);
+        store.merge(root, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         counter.set(0);
         // the following should just make one call to DocumentStore.query()
         for (ChildNodeEntry e : store.getRoot().getChildNodeEntries()) {