Author: jukka
Date: Wed Jan 29 14:45:20 2014
New Revision: 1562464

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

Encapsulate the list of events entirely within EventQueue

Modified:
    
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventQueue.java
    
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/QueueingHandler.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventQueue.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventQueue.java?rev=1562464&r1=1562463&r2=1562464&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventQueue.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventQueue.java
 Wed Jan 29 14:45:20 2014
@@ -54,7 +54,7 @@ class EventQueue implements EventIterato
             @Nonnull NodeState before, @Nonnull NodeState after,
             @Nonnull String basePath, @Nonnull EventFilter filter) {
         ChangeHandler handler = new QueueingHandler(
-                queue, mapper, info, before, after);
+                this, mapper, info, before, after);
         for (String name : PathUtils.elements(basePath)) {
             before = before.getChildNode(name);
             after = after.getChildNode(name);
@@ -67,6 +67,13 @@ class EventQueue implements EventIterato
         this.generator = new EventGenerator(before, after, handler);
     }
 
+    /**
+     * Called by the {@link QueueingHandler} to add new events to the queue.
+     */
+    void addEvent(Event event) {
+        queue.add(event);
+    }
+
     //-----------------------------------------------------< EventIterator >--
 
     @Override

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/QueueingHandler.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/QueueingHandler.java?rev=1562464&r1=1562463&r2=1562464&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/QueueingHandler.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/QueueingHandler.java
 Wed Jan 29 14:45:20 2014
@@ -22,11 +22,8 @@ import static java.util.Collections.empt
 import static org.apache.jackrabbit.JcrConstants.JCR_UUID;
 import static org.apache.jackrabbit.JcrConstants.MIX_REFERENCEABLE;
 
-import java.util.LinkedList;
 import java.util.Map;
 
-import javax.jcr.observation.Event;
-
 import org.apache.jackrabbit.api.observation.JackrabbitEvent;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.commons.PathUtils;
@@ -62,7 +59,7 @@ class QueueingHandler implements ChangeH
 
     private final TypePredicate afterReferenceable;
 
-    private final LinkedList<Event> queue;
+    private final EventQueue queue;
 
     private final NamePathMapper mapper;
 
@@ -73,7 +70,7 @@ class QueueingHandler implements ChangeH
     private final NodeState after;
 
     QueueingHandler(
-            LinkedList<Event> queue, NamePathMapper mapper, CommitInfo info,
+            EventQueue queue, NamePathMapper mapper, CommitInfo info,
             NodeState before, NodeState after) {
         this.parent = null;
         this.name = null;
@@ -159,7 +156,7 @@ class QueueingHandler implements ChangeH
 
     @Override
     public void propertyAdded(PropertyState after) {
-        queue.add(new ItemEvent(after.getName()) {
+        queue.addEvent(new ItemEvent(after.getName()) {
             @Override
             public int getType() {
                 return PROPERTY_ADDED;
@@ -169,7 +166,7 @@ class QueueingHandler implements ChangeH
 
     @Override
     public void propertyChanged(PropertyState before, PropertyState after) {
-        queue.add(new ItemEvent(after.getName()) {
+        queue.addEvent(new ItemEvent(after.getName()) {
             @Override
             public int getType() {
                 return PROPERTY_CHANGED;
@@ -179,7 +176,7 @@ class QueueingHandler implements ChangeH
 
     @Override
     public void propertyDeleted(PropertyState before) {
-        queue.add(new ItemEvent(before.getName()) {
+        queue.addEvent(new ItemEvent(before.getName()) {
             @Override
             public int getType() {
                 return PROPERTY_REMOVED;
@@ -189,7 +186,7 @@ class QueueingHandler implements ChangeH
 
     @Override
     public void nodeAdded(String name, NodeState after) {
-        queue.add(new NodeEvent(name, after, afterReferenceable) {
+        queue.addEvent(new NodeEvent(name, after, afterReferenceable) {
             @Override
             public int getType() {
                 return NODE_ADDED;
@@ -199,7 +196,7 @@ class QueueingHandler implements ChangeH
 
     @Override
     public void nodeDeleted(String name, NodeState before) {
-        queue.add(new NodeEvent(name, before, beforeReferenceable) {
+        queue.addEvent(new NodeEvent(name, before, beforeReferenceable) {
             @Override
             public int getType() {
                 return NODE_REMOVED;
@@ -210,7 +207,7 @@ class QueueingHandler implements ChangeH
     @Override
     public void nodeMoved(
             final String sourcePath, String name, NodeState moved) {
-        queue.add(new NodeEvent(name, moved, afterReferenceable) {
+        queue.addEvent(new NodeEvent(name, moved, afterReferenceable) {
             @Override
             public int getType() {
                 return NODE_MOVED;
@@ -227,7 +224,7 @@ class QueueingHandler implements ChangeH
     @Override
     public void nodeReordered(
             final String destName, final String name, NodeState reordered) {
-        queue.add(new NodeEvent(name, reordered, afterReferenceable) {
+        queue.addEvent(new NodeEvent(name, reordered, afterReferenceable) {
             @Override
             public int getType() {
                 return NODE_MOVED;


Reply via email to