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;