Author: chetanm
Date: Thu Nov 24 14:02:29 2016
New Revision: 1771137

URL: http://svn.apache.org/viewvc?rev=1771137&view=rev
Log:
OAK-4898 - Allow for external changes to have a CommitInfo attached

Changes in observation logic
-- Switch to Nonnull annotation for CommitInfo param
-- Replace usage of CommitInfo == null with CommitInfo.isExternal

One TODO as in optimization left where while compacting changes the ChangeSet 
can be merged
--

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java
    
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
    
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java
 Thu Nov 24 14:02:29 2016
@@ -19,7 +19,6 @@
 package org.apache.jackrabbit.oak.plugins.observation;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -41,6 +40,6 @@ public interface Filter {
      * @return true to exclude this content change (not forward), false to
      *         include it (forward)
      */
-    public boolean excludes(@Nonnull NodeState root, @Nullable CommitInfo 
info);
+    boolean excludes(@Nonnull NodeState root, @Nonnull CommitInfo info);
 
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java
 Thu Nov 24 14:02:29 2016
@@ -44,6 +44,6 @@ public interface FilteringAwareObserver
      * @param after the after NodeState
      * @param info the associated CommitInfo
      */
-    public void contentChanged(@Nonnull NodeState before, @Nonnull NodeState 
after, @Nullable CommitInfo info);
+    void contentChanged(@Nonnull NodeState before, @Nonnull NodeState after, 
@Nonnull CommitInfo info);
     
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java
 Thu Nov 24 14:02:29 2016
@@ -46,7 +46,7 @@ public class FilteringDispatcher impleme
 
     @Override
     public void contentChanged(@Nonnull NodeState root,
-                               @Nullable CommitInfo info) {
+                               @Nonnull CommitInfo info) {
         if (info != FilteringObserver.NOOP_CHANGE) {
             observer.contentChanged(before, root, info);
         }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java
 Thu Nov 24 14:02:29 2016
@@ -91,7 +91,7 @@ public class FilteringObserver implement
     }
 
     @Override
-    public final void contentChanged(@Nonnull NodeState root, @Nullable 
CommitInfo info) {
+    public final void contentChanged(@Nonnull NodeState root, @Nonnull 
CommitInfo info) {
         if (filter.excludes(root, info)) {
             lastNoop = root;
             return;

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java
 Thu Nov 24 14:02:29 2016
@@ -122,7 +122,7 @@ public abstract class NodeObserver imple
             @Nonnull CommitInfo commitInfo);
 
     @Override
-    public void contentChanged(@Nonnull NodeState root, @Nullable CommitInfo 
info) {
+    public void contentChanged(@Nonnull NodeState root, @Nonnull CommitInfo 
info) {
         if (previousRoot != null) {
             try {
                 long start = PERF_LOGGER.start();
@@ -187,7 +187,7 @@ public abstract class NodeObserver imple
         public NodeEventHandler(String path, CommitInfo commitInfo, 
NamePathMapper namePathMapper,
                 Set<String> propertyNames) {
             this.path = path;
-            this.commitInfo = commitInfo == null ? CommitInfo.EMPTY : 
commitInfo;
+            this.commitInfo = commitInfo;
             this.namePathMapper = namePathMapper;
             this.propertyNames = propertyNames;
             this.eventType = EventType.CHANGED;

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
 Thu Nov 24 14:02:29 2016
@@ -430,7 +430,7 @@ public final class FilterBuilder {
             }
 
             private boolean isExternal(CommitInfo info) {
-                return info == null;
+                return info.isExternal();
             }
             
             @Override

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
 Thu Nov 24 14:02:29 2016
@@ -33,7 +33,6 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import com.google.common.base.Predicate;
 import org.apache.jackrabbit.oak.commons.concurrent.NotifyingFutureTask;
@@ -246,7 +245,7 @@ public class BackgroundObserver implemen
                 return size(filter(queue, new Predicate<ContentChange>() {
                     @Override
                     public boolean apply(ContentChange input) {
-                        return input.info != null;
+                        return !input.info.isExternal();
                     }
                 }));
             }
@@ -256,7 +255,7 @@ public class BackgroundObserver implemen
                 return size(filter(queue, new Predicate<ContentChange>() {
                     @Override
                     public boolean apply(ContentChange input) {
-                        return input.info == null;
+                        return input.info.isExternal();
                     }
                 }));
             }
@@ -269,15 +268,18 @@ public class BackgroundObserver implemen
      * @throws IllegalStateException  if {@link #close()} has already been 
called.
      */
     @Override
-    public synchronized void contentChanged(@Nonnull NodeState root, @Nullable 
CommitInfo info) {
+    public synchronized void contentChanged(@Nonnull NodeState root, @Nonnull 
CommitInfo info) {
         checkState(!stopped);
         checkNotNull(root);
+        checkNotNull(info);
 
-        if (alwaysCollapseExternalEvents && info == null && last != null && 
last.info == null) {
+        if (alwaysCollapseExternalEvents && info.isExternal() && last != null 
&& last.info.isExternal()) {
             // This is an external change. If the previous change was
             // also external, we can drop it from the queue (since external
             // changes in any case can cover multiple commits) to help
             // prevent the queue from filling up too fast.
+
+            //TODO - Support for merging ChangeSet for external changes
             queue.remove(last);
             full = false;
         }
@@ -287,7 +289,7 @@ public class BackgroundObserver implemen
             // If the queue is full, some commits have already been skipped
             // so we need to drop the possible local commit information as
             // only external changes can be merged together to larger chunks.
-            change = new ContentChange(root, null);
+            change = new ContentChange(root, CommitInfo.EMPTY_EXTERNAL);
         } else {
             change = new ContentChange(root, info);
         }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
 Thu Nov 24 14:02:29 2016
@@ -63,7 +63,7 @@ public class ChangeDispatcher implements
     @Override
     @Nonnull
     public synchronized Closeable addObserver(final Observer observer) {
-        observer.contentChanged(root, null);
+        observer.contentChanged(root, CommitInfo.EMPTY_EXTERNAL);
         observers.addObserver(observer);
         return new Closeable() {
             @Override
@@ -74,8 +74,9 @@ public class ChangeDispatcher implements
     }
 
     @Override
-    public synchronized void contentChanged(@Nonnull NodeState root, @Nullable 
CommitInfo info) {
+    public synchronized void contentChanged(@Nonnull NodeState root, @Nonnull 
CommitInfo info) {
         checkNotNull(root);
+        checkNotNull(info);
         observers.contentChanged(root, info);
         this.root = root;
     }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java
 Thu Nov 24 14:02:29 2016
@@ -119,7 +119,7 @@ public class BackgroundObserverTest {
             volatile NodeState previous;
 
             @Override
-            public void contentChanged(@Nonnull final NodeState root, 
@Nullable CommitInfo info) {
+            public void contentChanged(@Nonnull final NodeState root, @Nonnull 
CommitInfo info) {
                 if (root.hasProperty("done")) {
                     done(assertions);
                 } else if (previous != null) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java
 Thu Nov 24 14:02:29 2016
@@ -59,7 +59,7 @@ public class PrefilteringBackgroundObser
                     return false;
                 } else if (info == excludingCommitInfo) {
                     return true;
-                } else if (info == null) {
+                } else if (info.isExternal()) {
                     return false;
                 }
                 throw new IllegalStateException("only supporting include or 
exclude");
@@ -147,7 +147,7 @@ public class PrefilteringBackgroundObser
         // initialize observer with an initial contentChanged
         // (see ChangeDispatcher#addObserver)
         {
-            compositeObserver.contentChanged(p(-1), null);
+            compositeObserver.contentChanged(p(-1), CommitInfo.EMPTY_EXTERNAL);
         }
         // Part 1 : first run with filtersEvaluatedMapWithEmptyObservers - 
empty or null shouldn't matter, it's excluded in both cases
         for (int k = 0; k < 1000; k++) {
@@ -322,7 +322,7 @@ public class PrefilteringBackgroundObser
         // initialize observer with an initial contentChanged
         // (see ChangeDispatcher#addObserver)
         {
-            compositeObserver.contentChanged(p(-1), null);
+            compositeObserver.contentChanged(p(-1), CommitInfo.EMPTY_EXTERNAL);
         }
         // remove above first event right away
         executeRunnables(runnableQ, 5);

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
 Thu Nov 24 14:02:29 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.jackrabbit.oak.jcr.observation;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 import static 
org.apache.jackrabbit.api.stats.RepositoryStatistics.Type.OBSERVATION_EVENT_COUNTER;
 import static 
org.apache.jackrabbit.api.stats.RepositoryStatistics.Type.OBSERVATION_EVENT_DURATION;
@@ -33,7 +34,6 @@ import java.util.concurrent.atomic.Atomi
 import java.util.concurrent.atomic.AtomicReference;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import javax.jcr.observation.Event;
 import javax.jcr.observation.EventIterator;
 import javax.jcr.observation.EventListener;
@@ -472,8 +472,9 @@ class ChangeProcessor implements Filteri
 
     @Override
     public void contentChanged(@Nonnull NodeState before, 
-                               @Nonnull NodeState after, 
-                               @Nullable CommitInfo info) {
+                               @Nonnull NodeState after,
+                               @Nonnull CommitInfo info) {
+        checkNotNull(info);
         FilterResult prefilterTestResult = null;
         if (PREFILTERING_TESTMODE) {
             // OAK-4908 test mode: when the ChangeCollectorProvider is enabled

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
 Thu Nov 24 14:02:29 2016
@@ -64,16 +64,16 @@ public class EventFactory {
 
     EventFactory(NamePathMapper mapper, CommitInfo commitInfo) {
         this.mapper = mapper;
-        if (commitInfo != null) {
+        if (!commitInfo.isExternal()) {
             this.userID = commitInfo.getUserId();
             Object userData = commitInfo.getInfo().get(USER_DATA);
             this.userData = userData instanceof String ? (String) userData : 
null;
             this.date = commitInfo.getDate();
             this.external = false;
         } else {
-            this.userID = CommitInfo.OAK_UNKNOWN;
+            this.userID = commitInfo.getUserId();
             this.userData = null;
-            this.date = System.currentTimeMillis(); // rough estimate
+            this.date = commitInfo.getDate(); // rough estimate
             this.external = true;
         }
     }


Reply via email to