Return-Path: X-Original-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Delivered-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 865B810A9A for ; Tue, 20 Aug 2013 08:24:12 +0000 (UTC) Received: (qmail 44029 invoked by uid 500); 20 Aug 2013 08:24:11 -0000 Delivered-To: apmail-jackrabbit-oak-commits-archive@jackrabbit.apache.org Received: (qmail 44010 invoked by uid 500); 20 Aug 2013 08:24:09 -0000 Mailing-List: contact oak-commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: oak-dev@jackrabbit.apache.org Delivered-To: mailing list oak-commits@jackrabbit.apache.org Received: (qmail 44000 invoked by uid 99); 20 Aug 2013 08:24:08 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Aug 2013 08:24:08 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Aug 2013 08:24:07 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 427E4238888A; Tue, 20 Aug 2013 08:23:47 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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/ Date: Tue, 20 Aug 2013 08:23:47 -0000 To: oak-commits@jackrabbit.apache.org From: mreutegg@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20130820082347.427E4238888A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 list = store.query(Collection.NODES, - from, to, limit); + List list; Children c = new Children(); - Set validRevisions = new HashSet(); - 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 validRevisions = new HashSet(); + 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 children = new ArrayList(); - 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;