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/06 17:10:51 UTC
svn commit: r1539379 - 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/
test/java/org/apache/jackrabbit/oak/ tes...
Author: mduerig
Date: Wed Nov 6 16:10:51 2013
New Revision: 1539379
URL: http://svn.apache.org/r1539379
Log:
OAK-1143 [scala] Repository init throws "illegal cyclic reference involving class ChangeDispatcher"
Remove "old" mechanism to inject observers into NodeStore implementations in favour of the new method
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/MongoMK.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/segment/SegmentNodeStore.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.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=1539379&r1=1539378&r2=1539379&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 Wed Nov 6 16:10:51 2013
@@ -41,10 +41,9 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.cache.CacheLIRS;
import org.apache.jackrabbit.oak.cache.CacheStats;
import org.apache.jackrabbit.oak.spi.commit.ChangeDispatcher;
-import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
-import org.apache.jackrabbit.oak.spi.commit.EmptyObserver;
+import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.Observer;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -62,12 +61,6 @@ public class KernelNodeStore implements
*/
private final MicroKernel kernel;
- /**
- * Change observer.
- */
- @Nonnull
- private final Observer observer;
-
private final LoadingCache<String, KernelNodeState> cache;
private final CacheStats cacheStats;
@@ -84,9 +77,8 @@ public class KernelNodeStore implements
*/
private KernelNodeState root;
- public KernelNodeStore(final MicroKernel kernel, long cacheSize, Observer observer) {
+ public KernelNodeStore(final MicroKernel kernel, long cacheSize) {
this.kernel = checkNotNull(kernel);
- this.observer = observer;
Weigher<String, KernelNodeState> weigher = new Weigher<String, KernelNodeState>() {
@Override
@@ -129,12 +121,8 @@ public class KernelNodeStore implements
changeDispatcher = new ChangeDispatcher(this);
}
- public KernelNodeStore(MicroKernel kernel, long cacheSize) {
- this(kernel, cacheSize, EmptyObserver.INSTANCE);
- }
-
public KernelNodeStore(MicroKernel kernel) {
- this(kernel, DEFAULT_CACHE_SIZE, EmptyObserver.INSTANCE);
+ this(kernel, DEFAULT_CACHE_SIZE);
}
/**
@@ -159,7 +147,6 @@ public class KernelNodeStore implements
String revision = kernel.getHeadRevision();
if (!revision.equals(root.getRevision())) {
root = getRootState(revision);
- observer.contentChanged(root, null);
}
return root;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java?rev=1539379&r1=1539378&r2=1539379&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java Wed Nov 6 16:10:51 2013
@@ -25,6 +25,10 @@ import java.util.concurrent.ExecutionExc
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.Weigher;
+import com.mongodb.DB;
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.api.MicroKernelException;
import org.apache.jackrabbit.mk.blobs.BlobStore;
@@ -41,15 +45,6 @@ import org.apache.jackrabbit.oak.commons
import org.apache.jackrabbit.oak.plugins.mongomk.Node.Children;
import org.apache.jackrabbit.oak.plugins.mongomk.blob.MongoBlobStore;
import org.apache.jackrabbit.oak.plugins.mongomk.util.Utils;
-import org.apache.jackrabbit.oak.spi.commit.EmptyObserver;
-import org.apache.jackrabbit.oak.spi.commit.Observer;
-
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.Weigher;
-import com.mongodb.DB;
-
-import static com.google.common.base.Preconditions.checkNotNull;
/**
* A MicroKernel implementation that stores the data in a MongoDB.
@@ -622,7 +617,6 @@ public class MongoMK implements MicroKer
private MongoNodeStore nodeStore;
private DocumentStore documentStore;
private BlobStore blobStore;
- private Observer observer = EmptyObserver.INSTANCE;
private int clusterId = Integer.getInteger("oak.mongoMK.clusterId", 0);
private int asyncDelay = 1000;
private boolean timing;
@@ -809,16 +803,6 @@ public class MongoMK implements MicroKer
return splitDocumentAgeMillis;
}
- public Builder setObserver(@Nonnull Observer observer) {
- this.observer = checkNotNull(observer);
- return this;
- }
-
- @Nonnull
- public Observer getObserver() {
- return observer;
- }
-
/**
* Open the MongoMK instance using the configured options.
*
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=1539379&r1=1539378&r2=1539379&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 Wed Nov 6 16:10:51 2013
@@ -219,14 +219,8 @@ public final class MongoNodeStore
*/
private final BlobStore blobStore;
- /**
- * The node store observer.
- */
- private final Observer observer;
-
public MongoNodeStore(MongoMK.Builder builder) {
this.blobStore = builder.getBlobStore();
- this.observer = builder.getObserver();
if (builder.isUseSimpleRevision()) {
this.simpleRevisionCounter = new AtomicInteger(0);
}
@@ -333,7 +327,6 @@ public final class MongoNodeStore
if (!checkNotNull(newHead).equals(previous)) {
// head changed
headRevision = newHead;
- observer.contentChanged(getRoot(newHead), null);
}
return previous;
}
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=1539379&r1=1539378&r2=1539379&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 Wed Nov 6 16:10:51 2013
@@ -32,10 +32,9 @@ import javax.annotation.Nullable;
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.spi.commit.ChangeDispatcher;
-import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
-import org.apache.jackrabbit.oak.spi.commit.EmptyObserver;
+import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.Observer;
import org.apache.jackrabbit.oak.spi.state.ConflictAnnotatingRebaseDiff;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -50,35 +49,24 @@ public class SegmentNodeStore implements
private final Journal journal;
- private final Observer observer;
-
private final ChangeDispatcher changeDispatcher;
private SegmentNodeState head;
private long maximumBackoff = MILLISECONDS.convert(10, SECONDS);
- public SegmentNodeStore(SegmentStore store, String journal, Observer observer) {
+ public SegmentNodeStore(SegmentStore store, String journal) {
this.store = store;
this.journal = store.getJournal(journal);
- this.observer = observer;
this.head = new SegmentNodeState(
store.getWriter().getDummySegment(), this.journal.getHead());
this.changeDispatcher = new ChangeDispatcher(this);
}
- public SegmentNodeStore(SegmentStore store, String journal) {
- this(store, journal, EmptyObserver.INSTANCE);
- }
-
public SegmentNodeStore(SegmentStore store) {
this(store, "root");
}
- public SegmentNodeStore(SegmentStore store, Observer observer) {
- this(store, "root", observer);
- }
-
void setMaximumBackoff(long max) {
this.maximumBackoff = max;
}
@@ -86,7 +74,6 @@ public class SegmentNodeStore implements
synchronized SegmentNodeState getHead() {
head = new SegmentNodeState(
store.getWriter().getDummySegment(), journal.getHead());
- observer.contentChanged(head.getChildNode(ROOT), null);
return head;
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java?rev=1539379&r1=1539378&r2=1539379&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java Wed Nov 6 16:10:51 2013
@@ -23,18 +23,12 @@ import static org.apache.jackrabbit.oak.
import java.io.Closeable;
import java.io.IOException;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
import org.apache.jackrabbit.mk.core.MicroKernelImpl;
-import org.apache.jackrabbit.oak.plugins.mongomk.MongoMK;
import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
+import org.apache.jackrabbit.oak.plugins.mongomk.MongoMK;
import org.apache.jackrabbit.oak.plugins.mongomk.MongoNodeStore;
import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
import org.apache.jackrabbit.oak.plugins.segment.memory.MemoryStore;
-import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
-import org.apache.jackrabbit.oak.spi.commit.Observer;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
/**
@@ -43,8 +37,6 @@ import org.apache.jackrabbit.oak.spi.sta
public abstract class NodeStoreFixture {
public static final NodeStoreFixture SEGMENT_MK = new NodeStoreFixture() {
- private final ResettableObserver observer = new ResettableObserver();
-
@Override
public String toString() {
return "SegmentMK Fixture";
@@ -52,22 +44,15 @@ public abstract class NodeStoreFixture {
@Override
public NodeStore createNodeStore() {
- return new SegmentNodeStore(new MemoryStore(), observer);
+ return new SegmentNodeStore(new MemoryStore());
}
@Override
public void dispose(NodeStore nodeStore) {
}
-
- @Override
- public void setObserver(Observer observer) {
- this.observer.setObserver(observer);
- }
};
public static final NodeStoreFixture MONGO_MK = new NodeStoreFixture() {
- private final ResettableObserver observer = new ResettableObserver();
-
@Override
public String toString() {
return "MongoMK Fixture";
@@ -75,7 +60,7 @@ public abstract class NodeStoreFixture {
@Override
public NodeStore createNodeStore() {
- return new CloseableNodeStore(new MongoMK.Builder().open(), observer);
+ return new CloseableNodeStore(new MongoMK.Builder().open());
}
@Override
@@ -88,16 +73,9 @@ public abstract class NodeStoreFixture {
}
}
}
-
- @Override
- public void setObserver(Observer observer) {
- this.observer.setObserver(observer);
- }
};
public static final NodeStoreFixture MONGO_NS = new NodeStoreFixture() {
- private final ResettableObserver observer = new ResettableObserver();
-
@Override
public String toString() {
return "MongoNS Fixture";
@@ -105,7 +83,7 @@ public abstract class NodeStoreFixture {
@Override
public NodeStore createNodeStore() {
- return new MongoMK.Builder().setObserver(observer).getNodeStore();
+ return new MongoMK.Builder().getNodeStore();
}
@Override
@@ -114,16 +92,9 @@ public abstract class NodeStoreFixture {
((MongoNodeStore) nodeStore).dispose();
}
}
-
- @Override
- public void setObserver(Observer observer) {
- this.observer.setObserver(observer);
- }
};
public static final NodeStoreFixture MK_IMPL = new NodeStoreFixture() {
- private final ResettableObserver observer = new ResettableObserver();
-
@Override
public String toString() {
return "MKImpl Fixture";
@@ -131,32 +102,25 @@ public abstract class NodeStoreFixture {
@Override
public NodeStore createNodeStore() {
- return new KernelNodeStore(new MicroKernelImpl(), DEFAULT_CACHE_SIZE, observer);
+ return new KernelNodeStore(new MicroKernelImpl(), DEFAULT_CACHE_SIZE);
}
@Override
public void dispose(NodeStore nodeStore) {
}
-
- @Override
- public void setObserver(Observer observer) {
- this.observer.setObserver(observer);
- }
};
public abstract NodeStore createNodeStore();
public abstract void dispose(NodeStore nodeStore);
- public abstract void setObserver(Observer observer);
-
private static class CloseableNodeStore
extends KernelNodeStore implements Closeable {
private final MongoMK kernel;
- public CloseableNodeStore(MongoMK kernel, Observer observer) {
- super(kernel, DEFAULT_CACHE_SIZE, observer);
+ public CloseableNodeStore(MongoMK kernel) {
+ super(kernel, DEFAULT_CACHE_SIZE);
this.kernel = kernel;
}
@@ -165,21 +129,4 @@ public abstract class NodeStoreFixture {
kernel.dispose();
}
}
-
- private static class ResettableObserver implements Observer {
-
- private Observer observer;
-
- @Override
- public void contentChanged(
- @Nonnull NodeState root, @Nullable CommitInfo info) {
- if (observer != null) {
- observer.contentChanged(root, info);
- }
- }
-
- public void setObserver(Observer observer) {
- this.observer = observer;
- }
- }
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java?rev=1539379&r1=1539378&r2=1539379&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java Wed Nov 6 16:10:51 2013
@@ -31,6 +31,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nonnull;
@@ -43,12 +45,14 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
+import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.Observer;
import org.apache.jackrabbit.oak.spi.state.DefaultNodeStateDiff;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.junit.After;
+import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -142,14 +146,19 @@ public class NodeStoreTest {
}
@Test
- public void afterCommitHook() throws CommitFailedException {
+ public void afterCommitHook() throws CommitFailedException, InterruptedException {
+ Assume.assumeTrue(store instanceof Observable);
+
final AtomicReference<NodeState> observedRoot =
new AtomicReference<NodeState>(null);
- fixture.setObserver(new Observer() {
+ final CountDownLatch latch = new CountDownLatch(2);
+
+ ((Observable) store).addObserver(new Observer() {
@Override
public void contentChanged(
@Nonnull NodeState root, @Nullable CommitInfo info) {
observedRoot.set(checkNotNull(root));
+ latch.countDown();
}
});
@@ -159,11 +168,11 @@ public class NodeStoreTest {
NodeBuilder newNodeBuilder = testBuilder.child("newNode");
newNodeBuilder.setProperty("n", 42);
-
testBuilder.getChildNode("a").remove();
store.merge(rootBuilder, EmptyHook.INSTANCE, null);
NodeState newRoot = store.getRoot(); // triggers the observer
+ latch.await(2, TimeUnit.SECONDS);
NodeState after = observedRoot.get();
assertNotNull(after);