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/04/16 17:52:06 UTC

svn commit: r1468477 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation2/ObservationManagerImpl2.java

Author: mduerig
Date: Tue Apr 16 15:52:05 2013
New Revision: 1468477

URL: http://svn.apache.org/r1468477
Log:
OAK-775: Implement backward compatible observation
clear event queue after restart

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation2/ObservationManagerImpl2.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation2/ObservationManagerImpl2.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation2/ObservationManagerImpl2.java?rev=1468477&r1=1468476&r2=1468477&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation2/ObservationManagerImpl2.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation2/ObservationManagerImpl2.java Tue Apr 16 15:52:05 2013
@@ -40,6 +40,7 @@ import org.apache.jackrabbit.commons.ite
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.ContentSession;
 import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
 import org.slf4j.Logger;
@@ -51,7 +52,7 @@ import org.slf4j.LoggerFactory;
 public class ObservationManagerImpl2 implements ObservationManager {
     private static final Logger log = LoggerFactory.getLogger(ObservationManagerImpl2.class);
 
-    private final Root root;
+    private final ContentSession contentSession;
     private final NamePathMapper namePathMapper;
     private final ScheduledExecutorService executor;
     private final ReadOnlyNodeTypeManager ntMgr;
@@ -59,10 +60,29 @@ public class ObservationManagerImpl2 imp
     private final AtomicBoolean hasEvents = new AtomicBoolean(false);
 
     public ObservationManagerImpl2(Root root, NamePathMapper namePathMapper, ScheduledExecutorService executor) {
-        this.root = checkNotNull(root);
+        this.contentSession = checkNotNull(root).getContentSession();
         this.namePathMapper = checkNotNull(namePathMapper);
         this.executor = checkNotNull(executor);
         this.ntMgr = ReadOnlyNodeTypeManager.getInstance(root, namePathMapper);
+        clearEventQueueOnRestart();
+    }
+
+    // FIXME: we need a better way to communicate BUNDLE_ID across.
+    // Preferably through persisting it to th repository
+    private void clearEventQueueOnRestart() {
+        if (EventQueueWriterProvider.BUNDLE_ID.get() == 0) {
+            try {
+                Root root = contentSession.getLatestRoot();
+                Tree events = root.getTree(ObservationConstants.EVENTS_PATH);
+                if (events != null) {
+                    events.remove();
+                    root.commit();
+                }
+            }
+            catch (CommitFailedException e) {
+                log.warn("Error clearing event queue after restart", e);
+            }
+        }
     }
 
     private static void stop(EventCollector collector) {
@@ -181,7 +201,7 @@ public class ObservationManagerImpl2 imp
     }
 
     ContentSession getContentSession() {
-        return root.getContentSession();
+        return contentSession;
     }
 
     NamePathMapper getNamePathMapper() {