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)


Reply via email to