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);
}