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 md...@apache.org on 2013/06/19 17:43:39 UTC

svn commit: r1494661 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java

Author: mduerig
Date: Wed Jun 19 15:43:39 2013
New Revision: 1494661

URL: http://svn.apache.org/r1494661
Log:
OAK-877: Generating observation events takes too long when intermediate save calls are involved
process full pending queue on each run of the ChangeProcessor

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java?rev=1494661&r1=1494660&r2=1494661&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java Wed Jun 19 15:43:39 2013
@@ -162,13 +162,15 @@ class ChangeProcessor implements Runnabl
 
         try {
             ChangeSet changes = changeListener.getChanges();
-            if (changes != null &&
-                    !(filterRef.get().excludeLocal() && changes.isLocal(observationManager.getContentSession()))) {
-                EventGeneratingNodeStateDiff diff = new EventGeneratingNodeStateDiff(changes);
-                changes.diff(VisibleDiff.wrap(diff));
-                if (!stopping) {
-                    diff.sendEvents();
+            while (changes != null) {
+                if (!(filterRef.get().excludeLocal() && changes.isLocal(observationManager.getContentSession()))) {
+                    EventGeneratingNodeStateDiff diff = new EventGeneratingNodeStateDiff(changes);
+                    changes.diff(VisibleDiff.wrap(diff));
+                    if (!stopping) {
+                        diff.sendEvents();
+                    }
                 }
+                changes = changeListener.getChanges();
             }
         } catch (Exception e) {
             log.error("Unable to generate or send events", e);