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 ch...@apache.org on 2016/05/27 04:37:12 UTC

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

Author: chetanm
Date: Fri May 27 04:37:12 2016
New Revision: 1745708

URL: http://svn.apache.org/viewvc?rev=1745708&view=rev
Log:
OAK-4403 - Diff traversal in persisted branch commit traversing to unrelated paths

Ignored test

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

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeStoreDiffTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeStoreDiffTest.java?rev=1745708&r1=1745707&r2=1745708&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeStoreDiffTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeStoreDiffTest.java Fri May 27 04:37:12 2016
@@ -20,11 +20,11 @@
 package org.apache.jackrabbit.oak.plugins.document;
 
 import java.io.IOException;
-import java.util.List;
+import java.util.Set;
 
 import javax.annotation.Nonnull;
 
-import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.commit.AnnotatingConflictHandler;
@@ -39,14 +39,18 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 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.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.apache.jackrabbit.oak.plugins.document.DocumentRootBuilder.UPDATE_LIMIT;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.not;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
 
 public class NodeStoreDiffTest {
 
@@ -55,7 +59,7 @@ public class NodeStoreDiffTest {
     @Rule
     public DocumentMKBuilderProvider builderProvider = new DocumentMKBuilderProvider();
 
-    private NodeStore ns;
+    private DocumentNodeStore ns;
     private final TestDocumentStore tds = new TestDocumentStore();
 
     @Before
@@ -148,6 +152,40 @@ public class NodeStoreDiffTest {
         assertFalse(tds.paths.contains("/oak:index/prop-b/b1"));
     }
 
+    @Ignore("OAK-4403")
+    @Test
+    public void diffWithPersistedBranch() throws Exception{
+        createNodes("/content/a", "/etc/x", "var", "/etc/y");
+
+        //#1 - Start making some changes
+        NodeBuilder b = ns.getRoot().builder();
+        createNodes(b, "/content/b");
+
+        //#2 - Do lots of change so as to trigger branch creation
+        //BranchState > Unmodified -> InMemory
+        for (int i = 0; i <= UPDATE_LIMIT; i++) {
+            b.child("content").child("a").child("c" + i);
+        }
+
+        //#3 -  In between push some changes to NodeStore
+        NodeBuilder b2 = ns.getRoot().builder();
+        b2.child("etc").child("x").setProperty("foo", 1);
+        b2.child("var").remove();
+        merge(b2);
+        ns.runBackgroundOperations();
+
+        createNodes(b, "/content/e");
+
+        tds.reset();
+
+        merge(b);
+
+        //With the merge the diff logic should not be accessing the
+        //paths which are not part of the current commit like /etc and /var
+        assertThat(tds.paths, not(hasItem("/etc")));
+        assertThat(tds.paths, not(hasItem("/var")));
+    }
+
     private NodeState merge(NodeBuilder nb) throws CommitFailedException {
         NodeState result = ns.merge(nb, EmptyHook.INSTANCE, CommitInfo.EMPTY);
         prRev(result);
@@ -156,19 +194,15 @@ public class NodeStoreDiffTest {
     }
 
     private void ops(){
-        if(ns instanceof DocumentNodeStore) {
-            DocumentNodeStore dns = ((DocumentNodeStore) ns);
-            dns.runBackgroundOperations();
-            //Background ops are disabled for simple revisions
-            dns.backgroundWrite();
-        }
+        ns.runBackgroundOperations();
+        //Background ops are disabled for simple revisions
+        ns.backgroundWrite();
     }
 
     private NodeState createNodes(String... paths) throws CommitFailedException {
         NodeBuilder nb = ns.getRoot().builder();
         createNodes(nb, paths);
-        NodeState result = merge(nb);
-        return result;
+        return merge(nb);
     }
 
     private static void createNodes(NodeBuilder builder, String... paths) {
@@ -189,7 +223,7 @@ public class NodeStoreDiffTest {
 
 
     private static class TestDocumentStore extends MemoryDocumentStore {
-        final List<String> paths = Lists.newArrayList();
+        final Set<String> paths = Sets.newHashSet();
 
         @Override
         public <T extends Document> T find(Collection<T> collection, String key) {