Author: mreutegg
Date: Wed Nov 20 10:04:46 2013
New Revision: 1543752
URL: http://svn.apache.org/r1543752
Log:
OAK-1202: Retry Persisted merge
- add test, currently ignored.
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MergeRetryTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MergeRetryTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MergeRetryTest.java?rev=1543752&r1=1543751&r2=1543752&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MergeRetryTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MergeRetryTest.java
Wed Nov 20 10:04:46 2013
@@ -30,10 +30,12 @@ import org.apache.jackrabbit.oak.spi.com
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.Ignore;
import org.junit.Test;
/**
- * Test for OAK-1198
+ * Test for conflicts introduced by commit hook, which can be overcome by
+ * retrying BranchState.merge().
*/
public class MergeRetryTest {
@@ -57,8 +59,11 @@ public class MergeRetryTest {
}
});
+ /**
+ * Test for OAK-1198
+ */
@Test
- public void retryOnConflict() throws Exception {
+ public void retryInMemory() throws Exception {
MemoryDocumentStore ds = new MemoryDocumentStore();
MemoryBlobStore bs = new MemoryBlobStore();
@@ -83,6 +88,48 @@ public class MergeRetryTest {
}
}
+ /**
+ * Test for OAK-1202
+ */
+ @Ignore
+ @Test
+ public void retryPersisted() throws Exception {
+ MemoryDocumentStore ds = new MemoryDocumentStore();
+ MemoryBlobStore bs = new MemoryBlobStore();
+
+ MongoMK mk1 = createMK(1, 1000, ds, bs);
+ MongoMK mk2 = createMK(2, 1000, ds, bs);
+
+ try {
+ NodeStore ns1 = new KernelNodeStore(mk1);
+ NodeStore ns2 = new KernelNodeStore(mk2);
+
+ NodeBuilder builder1 = ns1.getRoot().builder();
+ createTree(builder1.child("bar"), 2);
+
+ NodeBuilder builder2 = ns2.getRoot().builder();
+ createTree(builder2.child("qux"), 2);
+
+ ns1.merge(builder1, HOOK, null);
+ ns2.merge(builder2, HOOK, null);
+ } finally {
+ mk1.dispose();
+ mk2.dispose();
+ }
+ }
+
+ private void createTree(NodeBuilder node, int level) {
+ if (level-- > 0) {
+ for (int i = 0; i < 10; i++) {
+ NodeBuilder child = node.child("node-" + i);
+ for (int p = 0; p < 10; p++) {
+ child.setProperty("p-" + p, "value");
+ }
+ createTree(child, level);
+ }
+ }
+ }
+
private MongoMK createMK(int clusterId, int asyncDelay,
DocumentStore ds, BlobStore bs) {
return new MongoMK.Builder().setDocumentStore(ds).setBlobStore(bs)