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 2013/09/24 15:56:54 UTC
svn commit: r1525889 -
/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentSplitTest.java
Author: mreutegg
Date: Tue Sep 24 13:56:54 2013
New Revision: 1525889
URL: http://svn.apache.org/r1525889
Log:
OAK-926: MongoMK: split documents when they are too large
- Add a cluster test
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentSplitTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentSplitTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentSplitTest.java?rev=1525889&r1=1525888&r2=1525889&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentSplitTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentSplitTest.java Tue Sep 24 13:56:54 2013
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugin
import java.util.Map;
import java.util.Set;
+import org.apache.jackrabbit.mk.blobs.MemoryBlobStore;
import org.apache.jackrabbit.oak.plugins.mongomk.util.Utils;
import org.junit.Test;
@@ -154,4 +155,50 @@ public class DocumentSplitTest extends B
valueMap = doc.getLocalMap("prop");
assertEquals(1L, valueMap.size());
}
+
+ @Test
+ public void cluster() {
+ MemoryDocumentStore ds = new MemoryDocumentStore();
+ MemoryBlobStore bs = new MemoryBlobStore();
+ MongoMK.Builder builder;
+
+ builder = new MongoMK.Builder();
+ builder.setDocumentStore(ds).setBlobStore(bs).setAsyncDelay(0);
+ MongoMK mk1 = builder.setClusterId(1).open();
+
+ mk1.commit("/", "+\"test\":{\"prop1\":0}", null, null);
+ // make sure the new node is visible to other MongoMK instances
+ mk1.backgroundWrite();
+
+ builder = new MongoMK.Builder();
+ builder.setDocumentStore(ds).setBlobStore(bs).setAsyncDelay(0);
+ MongoMK mk2 = builder.setClusterId(2).open();
+ builder = new MongoMK.Builder();
+ builder.setDocumentStore(ds).setBlobStore(bs).setAsyncDelay(0);
+ MongoMK mk3 = builder.setClusterId(3).open();
+
+ for (int i = 0; i < NodeDocument.REVISIONS_SPLIT_OFF_SIZE; i++) {
+ mk1.commit("/", "^\"test/prop1\":" + i, null, null);
+ mk2.commit("/", "^\"test/prop2\":" + i, null, null);
+ mk3.commit("/", "^\"test/prop3\":" + i, null, null);
+ }
+
+ mk1.runBackgroundOperations();
+ mk2.runBackgroundOperations();
+ mk3.runBackgroundOperations();
+
+ NodeDocument doc = ds.find(Collection.NODES, Utils.getIdFromPath("/test"));
+ assertNotNull(doc);
+ Map<Revision, String> revs = doc.getLocalRevisions();
+ assertEquals(3, revs.size());
+ revs = doc.getValueMap("_revisions");
+ assertEquals(3 * NodeDocument.REVISIONS_SPLIT_OFF_SIZE + 1, revs.size());
+ Revision previous = null;
+ for (Map.Entry<Revision, String> entry : revs.entrySet()) {
+ if (previous != null) {
+ assertTrue(previous.compareRevisionTime(entry.getKey()) > 0);
+ }
+ previous = entry.getKey();
+ }
+ }
}