Author: chetanm
Date: Sun Mar 30 04:47:37 2014
New Revision: 1583104

URL: http://svn.apache.org/r1583104
Log:
OAK-1644 - Has Binary flag should also be copied to split documents

-- changed hasBinary to return boolean
-- flag is set in split doc if main doc had the flag set

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.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=1583104&r1=1583103&r2=1583104&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
 Sun Mar 30 04:47:37 2014
@@ -221,7 +221,7 @@ public class Commit {
 
         for (String path : this.nodesWithBinaries) {
             NodeDocument nd = store.getIfCached(Collection.NODES, 
Utils.getIdFromPath(path));
-            if ((nd == null) || (nd.hasBinary() != 1)) {
+            if ((nd == null) || !nd.hasBinary()) {
                 UpdateOp updateParentOp = getUpdateOperationForNode(path);
                 NodeDocument.setHasBinary(updateParentOp);
             }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1583104&r1=1583103&r2=1583104&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
 Sun Mar 30 04:47:37 2014
@@ -431,9 +431,12 @@ public final class NodeDocument extends 
         return lastCheckTime.get();
     }
 
-    public int hasBinary() {
+    public boolean hasBinary() {
         Number flag = (Number) get(HAS_BINARY_FLAG);
-        return flag != null ? flag.intValue() : 0;
+        if(flag == null){
+            return false;
+        }
+        return flag.intValue() == HAS_BINARY_VAL;
     }
 
     /**
@@ -1324,6 +1327,11 @@ public final class NodeDocument extends 
             type = SplitDocType.PROP_COMMIT_ONLY;
         }
 
+        //Copy over the hasBinary flag
+        if(mainDoc.hasBinary()){
+            setHasBinary(old);
+        }
+
         setSplitDocType(old,type);
     }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java?rev=1583104&r1=1583103&r2=1583104&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentSplitTest.java
 Sun Mar 30 04:47:37 2014
@@ -41,6 +41,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
+import static 
org.apache.jackrabbit.oak.plugins.document.MongoBlobGCTest.randomStream;
 import static 
org.apache.jackrabbit.oak.plugins.document.NodeDocument.SplitDocType;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -351,6 +352,32 @@ public class DocumentSplitTest extends B
     }
 
     @Test
+    public void splitDocWithHasBinary() throws Exception{
+        DocumentStore store = mk.getDocumentStore();
+        DocumentNodeStore ns = mk.getNodeStore();
+        NodeBuilder b1 = ns.getRoot().builder();
+        
b1.child("test").child("foo").setProperty("binaryProp",ns.createBlob(randomStream(1,
 4096)));;
+        ns.merge(b1, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+
+        //Commit on a node which has a child and where the commit root
+        // is parent
+        for (int i = 0; i < NodeDocument.NUM_REVS_THRESHOLD; i++) {
+            b1 = ns.getRoot().builder();
+            b1.child("test").child("foo").setProperty("prop",i);
+            ns.merge(b1, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+        }
+        ns.runBackgroundOperations();
+        NodeDocument doc = store.find(NODES, Utils.getIdFromPath("/test/foo"));
+        List<NodeDocument> prevDocs = 
ImmutableList.copyOf(doc.getAllPreviousDocs());
+        assertEquals(1, prevDocs.size());
+
+        //Check for hasBinary
+        assertTrue(doc.hasBinary());
+        assertTrue(prevDocs.get(0).hasBinary());
+
+    }
+
+    @Test
     public void cascadingSplit() {
         cascadingSplit("/test/node");
     }


Reply via email to