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/08/20 10:23:47 UTC

svn commit: r1515736 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/

Author: mreutegg
Date: Tue Aug 20 08:23:46 2013
New Revision: 1515736

URL: http://svn.apache.org/r1515736
Log:
OAK-962: RootFuzzIT fails on MongoMK with seed -1091889749
- Fix in MongoMK
- Enabled test in ManyChildrenIT

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Node.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ManyChildrenIT.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java?rev=1515736&r1=1515735&r2=1515736&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java Tue Aug 20 08:23:46 2013
@@ -515,21 +515,34 @@ public class MongoMK implements MicroKer
         // as the starting point
         String from = Utils.getKeyLowerLimit(path);
         String to = Utils.getKeyUpperLimit(path);
-        List<NodeDocument> list = store.query(Collection.NODES,
-                from, to, limit);
+        List<NodeDocument> list;
         Children c = new Children();
-        Set<Revision> validRevisions = new HashSet<Revision>();
-        if (list.size() >= limit) {
+        int rawLimit = limit;
+        do {
+            c.children.clear();
             c.hasMore = true;
-        }
-        for (NodeDocument doc : list) {
-            // filter out deleted children
-            if (doc.getLiveRevision(this, store, rev, validRevisions) == null) {
-                continue;
-            }
-            String p = Utils.getPathFromId(doc.getId());
-            c.children.add(p);
-        }
+            list = store.query(Collection.NODES,
+                    from, to, rawLimit);
+            Set<Revision> validRevisions = new HashSet<Revision>();
+            for (NodeDocument doc : list) {
+                // filter out deleted children
+                if (doc.getLiveRevision(this, store, rev, validRevisions) == null) {
+                    continue;
+                }
+                String p = Utils.getPathFromId(doc.getId());
+                if (c.children.size() < limit) {
+                    // add to children until limit is reached
+                    c.children.add(p);
+                }
+            }
+            if (list.size() < rawLimit) {
+                // fewer documents returned than requested
+                // -> no more documents
+                c.hasMore = false;
+            }
+            // double rawLimit for next round
+            rawLimit = (int) Math.min(((long) rawLimit) * 2, Integer.MAX_VALUE);
+        } while (c.children.size() < limit && c.hasMore);
         return c;
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Node.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Node.java?rev=1515736&r1=1515735&r2=1515736&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Node.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Node.java Tue Aug 20 08:23:46 2013
@@ -122,8 +122,7 @@ public class Node implements CacheValue 
     static class Children implements CacheValue {
 
         final ArrayList<String> children = new ArrayList<String>();
-        boolean hasMore;
-        long offset;
+        boolean hasMore = false;
 
         @Override
         public int getMemory() {

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ManyChildrenIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ManyChildrenIT.java?rev=1515736&r1=1515735&r2=1515736&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ManyChildrenIT.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/ManyChildrenIT.java Tue Aug 20 08:23:46 2013
@@ -58,7 +58,6 @@ public class ManyChildrenIT extends Abst
         session2.logout();
     }
 
-    @Ignore("OAK-962")
     @Test
     public void addRemoveNodes() throws Exception {
         int numNodes = 101;