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");
}