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 mr...@apache.org on 2015/08/24 16:30:03 UTC

svn commit: r1697410 - /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java

Author: mreutegg
Date: Mon Aug 24 14:30:03 2015
New Revision: 1697410

URL: http://svn.apache.org/r1697410
Log:
OAK-3259: Optimize NodeDocument.getNewestRevision()

Add cluster test

Modified:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java?rev=1697410&r1=1697409&r2=1697410&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java Mon Aug 24 14:30:03 2015
@@ -19,10 +19,13 @@ package org.apache.jackrabbit.oak.plugin
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
 import java.util.Set;
 
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Iterators;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -164,6 +167,49 @@ public class NodeDocumentTest {
     }
 
     @Test
+    public void getAllChangesCluster() throws Exception {
+        final int NUM_CLUSTER_NODES = 3;
+        final int NUM_CHANGES = 500;
+        DocumentStore store = new MemoryDocumentStore();
+        List<DocumentNodeStore> docStores = Lists.newArrayList();
+        for (int i = 0; i < NUM_CLUSTER_NODES; i++) {
+            DocumentNodeStore ns = new DocumentMK.Builder()
+                    .setDocumentStore(store)
+                    .setAsyncDelay(0).getNodeStore();
+            docStores.add(ns);
+        }
+        Random r = new Random(42);
+        for (int i = 0; i < NUM_CHANGES; i++) {
+            // randomly pick a clusterNode
+            int clusterIdx = r.nextInt(NUM_CLUSTER_NODES);
+            DocumentNodeStore ns = docStores.get(clusterIdx);
+            NodeBuilder builder = ns.getRoot().builder();
+            builder.setProperty("p-" + clusterIdx, i);
+            merge(ns, builder);
+            if (r.nextFloat() < 0.2) {
+                Revision head = ns.getHeadRevision();
+                for (UpdateOp op : SplitOperations.forDocument(
+                        getRootDocument(store), ns, head, 2)) {
+                    store.createOrUpdate(NODES, op);
+                }
+            }
+        }
+        DocumentNodeStore ns = docStores.get(0);
+        NodeDocument root = getRootDocument(ns.getDocumentStore());
+        Revision previous = ns.newRevision();
+        for (Revision rev : root.getAllChanges()) {
+            assertTrue(previous.compareRevisionTimeThenClusterId(rev) > 0);
+            previous = rev;
+        }
+        // numChanges + one revision when node was created
+        assertEquals(NUM_CHANGES + 1, Iterables.size(root.getAllChanges()));
+
+        for (DocumentNodeStore dns : docStores) {
+            dns.dispose();
+        }
+    }
+
+    @Test
     public void getPreviousDocLeaves() throws Exception {
         DocumentNodeStore ns = createTestStore(200);
         Revision previous = ns.newRevision();