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/01/28 17:05:40 UTC

svn commit: r1562100 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation: ./ filter/

Author: jukka
Date: Tue Jan 28 16:05:39 2014
New Revision: 1562100

URL: http://svn.apache.org/r1562100
Log:
OAK-1332: Large number of changes to the same node can fill observation queue

Replace includeChange() with includeReorder() for more accurate event filtering

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventGenerator.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UniversalFilter.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/VisibleFilter.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventGenerator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventGenerator.java?rev=1562100&r1=1562099&r2=1562100&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventGenerator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/EventGenerator.java Tue Jan 28 16:05:39 2014
@@ -179,8 +179,7 @@ public class EventGenerator implements E
         public boolean propertyChanged(
                 PropertyState before, PropertyState after) {
             // check for reordering of child nodes
-            if (OAK_CHILD_ORDER.equals(before.getName()) &&
-                    filter.includeChange(this.name, this.before, this.after)) {
+            if (OAK_CHILD_ORDER.equals(before.getName())) {
                 handleReorderedNodes(
                         before.getValue(NAMES), after.getValue(NAMES));
             }
@@ -279,11 +278,14 @@ public class EventGenerator implements E
                     if (a != b && beforeName.equals(afterName)) {
                         beforeNames.set(b, beforeNames.get(a));
                         beforeNames.set(a, beforeName);
-                        Map<String, String> info = ImmutableMap.of(
-                                "srcChildRelPath", context.getJcrName(beforeNames.get(a)),
-                                "destChildRelPath", context.getJcrName(beforeNames.get(a + 1)));
-                        ImmutableTree tree = afterTree.getChild(afterName);
-                        events.add(new EventImpl(context, NODE_MOVED, tree, info));
+                        NodeState afterChild = this.after.getChildNode(afterName);
+                        if (filter.includeReorder(afterName, afterChild)) {
+                            Map<String, String> info = ImmutableMap.of(
+                                    "srcChildRelPath", context.getJcrName(beforeName),
+                                    "destChildRelPath", context.getJcrName(beforeNames.get(a + 1)));
+                            ImmutableTree tree = new ImmutableTree(afterTree, afterName, afterChild);
+                            events.add(new EventImpl(context, NODE_MOVED, tree, info));
+                        }
                     }
                 }
             }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java?rev=1562100&r1=1562099&r2=1562100&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ACFilter.java Tue Jan 28 16:05:39 2014
@@ -87,11 +87,6 @@ public class ACFilter implements EventFi
     }
 
     @Override
-    public boolean includeChange(String name, NodeState before, NodeState after) {
-        return treePermission.getChildPermission(name, after).canRead();
-    }
-
-    @Override
     public boolean includeDelete(String name, NodeState before) {
         return treePermission.getChildPermission(name, before).canRead();
     }
@@ -102,6 +97,11 @@ public class ACFilter implements EventFi
     }
 
     @Override
+    public boolean includeReorder(String name, NodeState reordered) {
+        return treePermission.getChildPermission(name, reordered).canRead();
+    }
+
+    @Override
     public EventFilter create(String name, NodeState before, NodeState after) {
         return new ACFilter(treePermission.getChildPermission(name, after));
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java?rev=1562100&r1=1562099&r2=1562100&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ConstantFilter.java Tue Jan 28 16:05:39 2014
@@ -56,17 +56,17 @@ public class ConstantFilter implements E
     }
 
     @Override
-    public boolean includeChange(String name, NodeState before, NodeState after) {
+    public boolean includeDelete(String name, NodeState before) {
         return include;
     }
 
     @Override
-    public boolean includeDelete(String name, NodeState before) {
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
         return include;
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String name, NodeState moved) {
+    public boolean includeReorder(String name, NodeState reordered) {
         return include;
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventFilter.java?rev=1562100&r1=1562099&r2=1562100&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventFilter.java Tue Jan 28 16:05:39 2014
@@ -59,15 +59,6 @@ public interface EventFilter {
     boolean includeAdd(String name, NodeState after);
 
     /**
-     * Include a changed node
-     * @param name name of the node
-     * @param before node before the change
-     * @param after  node after the change
-     * @return  {@code true} if the node should be included
-     */
-    boolean includeChange(String name, NodeState before, NodeState after);
-
-    /**
      * Include a deleted node
      * @param name name of the node
      * @param before deleted node
@@ -85,6 +76,14 @@ public interface EventFilter {
     boolean includeMove(String sourcePath, String name, NodeState moved);
 
     /**
+     * Include a reordered node
+     * @param name        name of the reordered node
+     * @param reordered   the reordered node
+     * @return  {@code true} if the node should be included
+     */
+    boolean includeReorder(String name, NodeState reordered);
+
+    /**
      * Factory for creating a filter instance for the given child node
      * @param name  name of the child node
      * @param before  before state of the child node

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java?rev=1562100&r1=1562099&r2=1562100&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/EventTypeFilter.java Tue Jan 28 16:05:39 2014
@@ -72,12 +72,12 @@ public class EventTypeFilter implements 
     }
 
     @Override
-    public boolean includeChange(String name, NodeState before, NodeState after) {
-        return true;
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
+        return includeByEvent(Event.NODE_MOVED);
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String name, NodeState moved) {
+    public boolean includeReorder(String name, NodeState reordered) {
         return includeByEvent(Event.NODE_MOVED);
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java?rev=1562100&r1=1562099&r2=1562100&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/Filters.java Tue Jan 28 16:05:39 2014
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 package org.apache.jackrabbit.oak.plugins.observation.filter;
 
 import static com.google.common.base.Preconditions.checkNotNull;
@@ -133,9 +132,9 @@ public final class Filters {
                 }
 
                 @Override
-                public boolean includeChange(String name, NodeState before, NodeState after) {
+                public boolean includeDelete(String name, NodeState before) {
                     for (EventFilter filter : filters) {
-                        if (filter.includeChange(name, before, after)) {
+                        if (filter.includeDelete(name, before)) {
                             return true;
                         }
                     }
@@ -143,9 +142,9 @@ public final class Filters {
                 }
 
                 @Override
-                public boolean includeDelete(String name, NodeState before) {
+                public boolean includeMove(String sourcePath, String name, NodeState moved) {
                     for (EventFilter filter : filters) {
-                        if (filter.includeDelete(name, before)) {
+                        if (filter.includeMove(sourcePath, name, moved)) {
                             return true;
                         }
                     }
@@ -153,9 +152,9 @@ public final class Filters {
                 }
 
                 @Override
-                public boolean includeMove(String sourcePath, String name, NodeState moved) {
+                public boolean includeReorder(String name, NodeState reordered) {
                     for (EventFilter filter : filters) {
-                        if (filter.includeMove(sourcePath, name, moved)) {
+                        if (filter.includeReorder(name, reordered)) {
                             return true;
                         }
                     }
@@ -232,9 +231,9 @@ public final class Filters {
                 }
 
                 @Override
-                public boolean includeChange(String name, NodeState before, NodeState after) {
+                public boolean includeDelete(String name, NodeState before) {
                     for (EventFilter filter : filters) {
-                        if (!filter.includeChange(name, before, after)) {
+                        if (!filter.includeDelete(name, before)) {
                             return false;
                         }
                     }
@@ -242,9 +241,9 @@ public final class Filters {
                 }
 
                 @Override
-                public boolean includeDelete(String name, NodeState before) {
+                public boolean includeMove(String sourcePath, String name, NodeState moved) {
                     for (EventFilter filter : filters) {
-                        if (!filter.includeDelete(name, before)) {
+                        if (!filter.includeMove(sourcePath, name, moved)) {
                             return false;
                         }
                     }
@@ -252,9 +251,9 @@ public final class Filters {
                 }
 
                 @Override
-                public boolean includeMove(String sourcePath, String name, NodeState moved) {
+                public boolean includeReorder(String name, NodeState reordered) {
                     for (EventFilter filter : filters) {
-                        if (!filter.includeMove(sourcePath, name, moved)) {
+                        if (!filter.includeReorder(name, reordered)) {
                             return false;
                         }
                     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java?rev=1562100&r1=1562099&r2=1562100&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/GlobbingPathFilter.java Tue Jan 28 16:05:39 2014
@@ -92,17 +92,17 @@ public class GlobbingPathFilter implemen
     }
 
     @Override
-    public boolean includeChange(String name, NodeState before, NodeState after) {
+    public boolean includeDelete(String name, NodeState before) {
         return includeItem(name);
     }
 
     @Override
-    public boolean includeDelete(String name, NodeState before) {
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
         return includeItem(name);
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String name, NodeState moved) {
+    public boolean includeReorder(String name, NodeState reordered) {
         return includeItem(name);
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UniversalFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UniversalFilter.java?rev=1562100&r1=1562099&r2=1562100&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UniversalFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/UniversalFilter.java Tue Jan 28 16:05:39 2014
@@ -131,11 +131,6 @@ public class UniversalFilter implements 
     }
 
     @Override
-    public boolean includeChange(String name, NodeState before, NodeState after) {
-        return predicate.apply(selector.select(this, name, before, after));
-    }
-
-    @Override
     public boolean includeDelete(String name, NodeState before) {
         return predicate.apply(selector.select(this, name, before, MISSING_NODE));
     }
@@ -146,6 +141,11 @@ public class UniversalFilter implements 
     }
 
     @Override
+    public boolean includeReorder(String name, NodeState reordered) {
+        return predicate.apply(selector.select(this, name, MISSING_NODE, reordered));
+    }
+
+    @Override
     public EventFilter create(String name, NodeState before, NodeState after) {
         return new UniversalFilter(
                 beforeState.getChildNode(name), afterState.getChildNode(name),

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/VisibleFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/VisibleFilter.java?rev=1562100&r1=1562099&r2=1562100&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/VisibleFilter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/VisibleFilter.java Tue Jan 28 16:05:39 2014
@@ -52,17 +52,17 @@ public class VisibleFilter implements Ev
     }
 
     @Override
-    public boolean includeChange(String name, NodeState before, NodeState after) {
+    public boolean includeDelete(String name, NodeState before) {
         return isVisible(name);
     }
 
     @Override
-    public boolean includeDelete(String name, NodeState before) {
+    public boolean includeMove(String sourcePath, String name, NodeState moved) {
         return isVisible(name);
     }
 
     @Override
-    public boolean includeMove(String sourcePath, String name, NodeState moved) {
+    public boolean includeReorder(String name, NodeState reordered) {
         return isVisible(name);
     }