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/11/11 13:17:07 UTC

svn commit: r1540692 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/kernel/ main/java/org/apache/jackrabbit/oak/plugins/mongomk/ main/java/org/apache/jackrabbit/oak/plugins/segment/ main/java/org/apache/jackrabbit/oak/spi/...

Author: mduerig
Date: Mon Nov 11 12:17:06 2013
New Revision: 1540692

URL: http://svn.apache.org/r1540692
Log:
OAK-1143: [scala] Repository init throws "illegal cyclic reference involving class ChangeDispatcher"
Remove dependency on NodeStore from ChangeDispatcher. ChangeDispatcher does not poll for external changes anymore.

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStoreBranch.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/CommitQueueTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java?rev=1540692&r1=1540691&r2=1540692&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java Mon Nov 11 12:17:06 2013
@@ -118,7 +118,7 @@ public class KernelNodeStore implements 
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
-        changeDispatcher = new ChangeDispatcher(this);
+        changeDispatcher = new ChangeDispatcher(root);
     }
 
     public KernelNodeStore(MicroKernel kernel) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java?rev=1540692&r1=1540691&r2=1540692&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStore.java Mon Nov 11 12:17:06 2013
@@ -286,7 +286,7 @@ public final class MongoNodeStore
             }
             getRevisionComparator().add(headRevision, Revision.newRevision(0));
         }
-        dispatcher = new ChangeDispatcher(this);
+        dispatcher = new ChangeDispatcher(getRoot());
         commitQueue = new CommitQueue(this, dispatcher);
         backgroundThread = new Thread(
                 new BackgroundOperation(this, isDisposed),

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStoreBranch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStoreBranch.java?rev=1540692&r1=1540691&r2=1540692&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStoreBranch.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeStoreBranch.java Mon Nov 11 12:17:06 2013
@@ -61,7 +61,7 @@ public class MongoNodeStoreBranch
 
     public MongoNodeStoreBranch(MongoNodeStore store,
                                 MongoNodeState base) {
-        super(store, new ChangeDispatcher(store), base);
+        super(store, new ChangeDispatcher(store.getRoot()), base);
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java?rev=1540692&r1=1540691&r2=1540692&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java Mon Nov 11 12:17:06 2013
@@ -60,7 +60,7 @@ public class SegmentNodeStore implements
         this.journal = store.getJournal(journal);
         this.head = new SegmentNodeState(
                 store.getWriter().getDummySegment(), this.journal.getHead());
-        this.changeDispatcher = new ChangeDispatcher(this);
+        this.changeDispatcher = new ChangeDispatcher(getRoot());
     }
 
     public SegmentNodeStore(SegmentStore store) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java?rev=1540692&r1=1540691&r2=1540692&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java Mon Nov 11 12:17:06 2013
@@ -36,10 +36,10 @@ import javax.annotation.Nullable;
 
 import com.google.common.collect.Sets;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
-import org.apache.jackrabbit.oak.spi.state.NodeStore;
 
 /**
- * A {@code ChangeDispatcher} instance records changes to a {@link NodeStore}
+ * A {@code ChangeDispatcher} instance records changes to a
+ * {@link org.apache.jackrabbit.oak.spi.state.NodeStore}
  * and dispatches them to interested parties.
  * <p>
  * Actual changes are reported by calling {@link #beforeCommit(NodeState)},
@@ -62,18 +62,16 @@ import org.apache.jackrabbit.oak.spi.sta
  */
 public class ChangeDispatcher implements Observable {
     private final Set<Listener> listeners = Sets.newHashSet();
-    private final NodeStore store;
 
     @Nonnull
     private volatile NodeState root;
 
     /**
-     * Create a new instance for recording changes to {@code store}.
-     * @param store  the node store to record changes for
+     * Create a new instance for recording changes to a {@code NodeStore}
+     * @param root  current root node state of the node store
      */
-    public ChangeDispatcher(@Nonnull NodeStore store) {
-        this.store = store;
-        this.root = checkNotNull(store.getRoot());
+    public ChangeDispatcher(@Nonnull NodeState root) {
+        this.root = checkNotNull(root);
     }
 
     /**
@@ -157,18 +155,6 @@ public class ChangeDispatcher implements
         changeCount.incrementAndGet();
     }
 
-    private void externalChange() {
-        if (!inLocalCommit()) {
-            long c = changeCount.get();
-            NodeState root = store.getRoot();  // Need to get root outside sync. See OAK-959
-            synchronized (this) {
-                if (c == changeCount.get() && !inLocalCommit()) {
-                    externalChange(root);
-                }
-            }
-        }
-    }
-
     private synchronized void externalChange(NodeState root) {
         if (!root.equals(this.root)) {
             add(root, null);
@@ -230,9 +216,6 @@ public class ChangeDispatcher implements
         public void run() {
             try {
                 while (!stopping) {
-                    if (commits.isEmpty()) {
-                        externalChange();
-                    }
                     Commit commit = commits.poll(100, TimeUnit.MILLISECONDS);
                     if (commit != null) {
                         observer.contentChanged(commit.getRoot(), commit.getCommitInfo());

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/CommitQueueTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/CommitQueueTest.java?rev=1540692&r1=1540691&r2=1540692&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/CommitQueueTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/CommitQueueTest.java Mon Nov 11 12:17:06 2013
@@ -44,7 +44,7 @@ public class CommitQueueTest {
     @Test
     public void concurrentCommits() throws Exception {
         final MongoNodeStore store = new MongoMK.Builder().getNodeStore();
-        ChangeDispatcher dispatcher = new ChangeDispatcher(store);
+        ChangeDispatcher dispatcher = new ChangeDispatcher(store.getRoot());
         AtomicBoolean running = new AtomicBoolean(true);
         final CommitQueue queue = new CommitQueue(store, dispatcher);
         final List<Exception> exceptions = Collections.synchronizedList(new ArrayList<Exception>());