Author: stefanegli
Date: Wed Nov 23 16:57:52 2016
New Revision: 1771006

URL: http://svn.apache.org/viewvc?rev=1771006&view=rev
Log:
OAK-5151 : fix handling of overflown ChangeSets in ChangeSetFilterImpl

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeSet.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ChangeSetFilterImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeSet.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeSet.java?rev=1771006&r1=1771005&r2=1771006&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeSet.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeSet.java
 Wed Nov 23 16:57:52 2016
@@ -76,7 +76,7 @@ public class ChangeSet {
     public String toString() {
         return "ChangeSet{paths[maxDepth:" + maxPathDepth + "]=" + parentPaths 
+ ", propertyNames=" + propertyNames
                 + ", parentNodeNames=" + parentNodeNames + ", 
parentNodeTypes=" + parentNodeTypes 
-                + ", allNodeTypes=" + allNodeTypes + "}";
+                + ", allNodeTypes=" + allNodeTypes + ", any overflow: " + 
anyOverflow() + "}";
     }
 
     @CheckForNull
@@ -107,5 +107,13 @@ public class ChangeSet {
     public Set<String> getAllNodeTypes() {
         return allNodeTypes;
     }
+    
+    public boolean anyOverflow() {
+        return getAllNodeTypes() == null || 
+                getParentNodeNames() == null ||
+                getParentNodeTypes() == null ||
+                getParentPaths() == null ||
+                getPropertyNames() == null;
+    }
 
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ChangeSetFilterImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ChangeSetFilterImpl.java?rev=1771006&r1=1771005&r2=1771006&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ChangeSetFilterImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/ChangeSetFilterImpl.java
 Wed Nov 23 16:57:52 2016
@@ -43,6 +43,13 @@ public class ChangeSetFilterImpl impleme
     private final Set<String> parentNodeNames;
     private final Set<String> parentNodeTypes;
     private final Set<String> propertyNames;
+    
+    @Override
+    public String toString() {
+        return "ChangeSetFilterImpl[rootIncludePaths="+rootIncludePaths+", 
includePathPatterns="+includePathPatterns+
+                ", excludePathPatterns="+excludePathPatterns+", 
parentNodeNames="+parentNodeNames+", parentNodeTypes="+
+                parentNodeTypes+", propertyNames="+propertyNames+"]";
+    }
 
     public ChangeSetFilterImpl(@Nonnull Set<String> includedParentPaths, 
boolean isDeep, Set<String> excludedParentPaths,
             Set<String> parentNodeNames, Set<String> parentNodeTypes, 
Set<String> propertyNames) {
@@ -101,8 +108,15 @@ public class ChangeSetFilterImpl impleme
     }
     
     private boolean doExcludes(ChangeSet changeSet) {
-        final Set<String> cpp = changeSet.getParentPaths();
-        final Set<String> parentPaths = cpp != null ? new HashSet<String>(cpp) 
: new HashSet<String>();
+        if (changeSet.anyOverflow()) {
+            // in case of an overflow we could
+            // either try to still determine include/exclude based on 
non-overflown
+            // sets - or we can do a fail-stop and determine this as too 
complex
+            // to try-to-exclude, and just include
+            //TODO: optimize this later
+            return false;
+        }
+        final Set<String> parentPaths = new 
HashSet<String>(changeSet.getParentPaths());
 
         // first go through excludes to remove those that are explicitly
         // excluded

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=1771006&r1=1771005&r2=1771006&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
 Wed Nov 23 16:57:52 2016
@@ -397,6 +397,11 @@ public final class FilterBuilder {
             final ChangeSetFilter changeSetFilter = 
FilterBuilder.this.changeSetFilter;
 
             @Override
+            public String toString() {
+                return super.toString() + " 
[changeSetFilter="+changeSetFilter+"]";
+            }
+            
+            @Override
             public boolean includeCommit(@Nonnull String sessionId, 
@CheckForNull CommitInfo info) {
                 return (includeSessionLocal || 
!isLocal(checkNotNull(sessionId), info))
                     && (includeClusterExternal || !isExternal(info))


Reply via email to