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/10/19 15:11:41 UTC

svn commit: r1765645 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java test/java/org/apache/jackrabbit/oak/plugins/document/bundlor/DocumentBundlingTest.java

Author: chetanm
Date: Wed Oct 19 15:11:41 2016
New Revision: 1765645

URL: http://svn.apache.org/viewvc?rev=1765645&view=rev
Log:
OAK-1312 -  [bundling] Bundle nodes into a document

Ensure that bundled nodes are not made part of unsaved modifications and hence not part of background writes

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/bundlor/DocumentBundlingTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java?rev=1765645&r1=1765644&r2=1765645&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java Wed Oct 19 15:11:41 2016
@@ -32,10 +32,9 @@ import javax.annotation.Nullable;
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
-
 import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.plugins.document.util.Utils;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.document.util.Utils;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -384,7 +383,7 @@ public class Commit {
             }
 
             //Ignore setting children path for bundled nodes
-            if (bundledNodes.contains(parentPath)){
+            if (isBundled(parentPath)){
                 continue;
             }
 
@@ -664,7 +663,9 @@ public class Commit {
             boolean isNew = op != null && op.isNew();
             if (op == null || !hasContentChanges(op) || denotesRoot(path)) {
                 // track intermediate node and root
-                tracker.track(path);
+                if (!isBundled(path)) {
+                    tracker.track(path);
+                }
             }
             nodeStore.applyChanges(before, after, rev, path, isNew,
                     added, removed, changed, cacheEntry);
@@ -697,6 +698,10 @@ public class Commit {
         }
     }
 
+    private boolean isBundled(String parentPath) {
+        return bundledNodes.contains(parentPath);
+    }
+
     private static final Function<UpdateOp.Key, String> KEY_TO_NAME =
             new Function<UpdateOp.Key, String>() {
         @Override

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/bundlor/DocumentBundlingTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/bundlor/DocumentBundlingTest.java?rev=1765645&r1=1765644&r2=1765645&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/bundlor/DocumentBundlingTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/bundlor/DocumentBundlingTest.java Wed Oct 19 15:11:41 2016
@@ -452,6 +452,23 @@ public class DocumentBundlingTest {
         AssertingDiff.assertEquals(appNode, appNode2);
     }
 
+    @Test
+    public void bundledDocsShouldNotBePartOfBackgroundUpdate() throws Exception{
+        NodeBuilder builder = store.getRoot().builder();
+        NodeBuilder fileNode = newNode("nt:file");
+        fileNode.child("jcr:content").setProperty("jcr:data", "foo");
+        builder.child("test").setChildNode("book.jpg", fileNode.getNodeState());
+
+        merge(builder);
+        builder = store.getRoot().builder();
+        childBuilder(builder, "/test/book.jpg/jcr:content/vlt:definition").setProperty("foo", "bar");
+        merge(builder);
+
+        //2 for /test, /test/book.jpg and /test/book.jpg/jcr:content should be there
+        //TODO If UnsavedModification is made public we can assert on path itself
+        assertEquals(2, store.getPendingWriteCount());
+    }
+
     private void createTestNode(String path, NodeState state) throws CommitFailedException {
         String parentPath = PathUtils.getParentPath(path);
         NodeBuilder builder = store.getRoot().builder();