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 94F82F63B for ; Wed, 20 Mar 2013 15:02:28 +0000 (UTC) Received: (qmail 5579 invoked by uid 500); 20 Mar 2013 15:02:28 -0000 Delivered-To: apmail-jackrabbit-oak-commits-archive@jackrabbit.apache.org Received: (qmail 5534 invoked by uid 500); 20 Mar 2013 15:02:28 -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 5524 invoked by uid 99); 20 Mar 2013 15:02:27 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 20 Mar 2013 15:02:27 +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; Wed, 20 Mar 2013 15:02:26 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 4028B23889BF; Wed, 20 Mar 2013 15:02:06 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1458866 - in /jackrabbit/oak/trunk/oak-mongomk/src: main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java test/java/org/apache/jackrabbit/mongomk/prototype/SimpleTest.java Date: Wed, 20 Mar 2013 15:02:06 -0000 To: oak-commits@jackrabbit.apache.org From: thomasm@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130320150206.4028B23889BF@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: thomasm Date: Wed Mar 20 15:02:05 2013 New Revision: 1458866 URL: http://svn.apache.org/r1458866 Log: OAK-619 Lock-free MongoMK implementation (support diff) Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/SimpleTest.java Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java?rev=1458866&r1=1458865&r2=1458866&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java (original) +++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java Wed Mar 20 15:02:05 2013 @@ -482,10 +482,6 @@ public class MongoMK implements MicroKer if (fromRevisionId.equals(toRevisionId)) { return ""; } - // TODO implement if needed - if (true) { - return "{}"; - } if (depth != 0) { throw new MicroKernelException("Only depth 0 is supported, depth is " + depth); } @@ -525,7 +521,11 @@ public class MongoMK implements MicroKer } else { Node n1 = getNode(n, fromRev); Node n2 = getNode(n, toRev); - if (!n1.equals(n2)) { + // this is not fully correct: + // a change is detected if the node changed recently, + // even if the revisions are well in the past + // if this is a problem it would need to be changed + if (!n1.getId().equals(n2.getId())) { w.tag('^').key(n).object().endObject().newline(); } } Modified: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/SimpleTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/SimpleTest.java?rev=1458866&r1=1458865&r2=1458866&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/SimpleTest.java (original) +++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/SimpleTest.java Wed Mar 20 15:02:05 2013 @@ -129,7 +129,6 @@ public class SimpleTest { } @Test - @Ignore public void diff() { MongoMK mk = createMK(); @@ -137,7 +136,7 @@ public class SimpleTest { String rev1 = mk.commit("/", "+\"t1\":{}", null, null); String rev2 = mk.commit("/", "+\"t2\":{}", null, null); String rev3 = mk.commit("/", "+\"t3\":{}", null, null); - String rev4 = mk.commit("/", "^\"t2/x\":1", null, null); + String rev4 = mk.commit("/", "^\"t3/x\":1", null, null); String r0 = mk.getNodes("/", rev0, 0, 0, Integer.MAX_VALUE, null); assertEquals("{\":childNodeCount\":0}", r0); @@ -157,7 +156,7 @@ public class SimpleTest { String diff13 = mk.diff(rev1, rev3, "/", 0).trim(); assertEquals("+\"/t2\":{}\n+\"/t3\":{}", diff13); String diff34 = mk.diff(rev3, rev4, "/", 0).trim(); - assertEquals("^\"/t2\":{}", diff34); + assertEquals("^\"/t3\":{}", diff34); mk.dispose(); } @@ -248,57 +247,6 @@ public class SimpleTest { // System.out.println(test); mk.dispose(); } - - @Test - public void cache() { - MongoMK mk = createMK(); - - // BAD - String rev = mk.commit("/", "+\"testRoot\":{} +\"index\":{}", null, null); - - // GOOD -// String rev = mk.commit("/", "+\"testRoot\":{} ", null, null); - - String test = mk.getNodes("/", rev, 0, 0, Integer.MAX_VALUE, ":id"); - // System.out.println(" " + test); -// test = mk.getNodes("/testRoot", rev, 0, 0, Integer.MAX_VALUE, ":id"); -// System.out.println(" " + test); - rev = mk.commit("/testRoot", "+\"a\":{}", null, null); -// test = mk.getNodes("/testRoot", rev, 0, 0, Integer.MAX_VALUE, ":id"); -// System.out.println(" " + test); -// rev = mk.commit("/testRoot/a", "+\"b\":{}", null, null); -// rev = mk.commit("/testRoot/a/b", "+\"c\":{} +\"d\":{}", null, null); -// test = mk.getNodes("/testRoot", rev, 0, 0, Integer.MAX_VALUE, ":id"); -// System.out.println(" " + test); -// test = mk.getNodes("/", rev, 0, 0, Integer.MAX_VALUE, ":id"); -// System.out.println(" " + test); -// rev = mk.commit("/index", "+\"a\":{}", null, null); - test = mk.getNodes("/", rev, 0, 0, Integer.MAX_VALUE, ":id"); - // System.out.println(" " + test); -// test = mk.getNodes("/testRoot", rev, 0, 0, Integer.MAX_VALUE, ":id"); -// System.out.println(" " + test); - -// assertEquals("{\"name\":\"Hello\",\":childNodeCount\":0}", test); -// -// rev = mk.commit("/test", "+\"a\":{\"name\": \"World\"}", null, null); -// rev = mk.commit("/test", "+\"b\":{\"name\": \"!\"}", null, null); -// test = mk.getNodes("/test", rev, 0, 0, Integer.MAX_VALUE, null); -// Children c; -// c = mk.readChildren("/", "1", -// Revision.fromString(rev), Integer.MAX_VALUE); -// assertEquals("/: [/test]", c.toString()); -// c = mk.readChildren("/test", "2", -// Revision.fromString(rev), Integer.MAX_VALUE); -// assertEquals("/test: [/test/a, /test/b]", c.toString()); -// -// rev = mk.commit("", "^\"/test\":1", null, null); -// test = mk.getNodes("/", rev, 0, 0, Integer.MAX_VALUE, null); -// assertEquals("{\"test\":1,\"test\":{},\":childNodeCount\":1}", test); - - // System.out.println(test); - mk.dispose(); - } - @Test public void testDeletion() { @@ -352,31 +300,31 @@ public class SimpleTest { // root node must not have the revision Map rootNode = store.find(Collection.NODES, "0:/"); - assertFalse(((Map) rootNode.get(UpdateOp.REVISIONS)).containsKey(head)); + assertFalse(((Map) rootNode.get(UpdateOp.REVISIONS)).containsKey(head)); // test node must have head in revisions Map node = store.find(Collection.NODES, "1:/test"); - assertTrue(((Map) node.get(UpdateOp.REVISIONS)).containsKey(head)); + assertTrue(((Map) node.get(UpdateOp.REVISIONS)).containsKey(head)); // foo must not have head in revisions and must refer to test // as commit root (depth = 1) Map foo = store.find(Collection.NODES, "2:/test/foo"); assertTrue(foo.get(UpdateOp.REVISIONS) == null); - assertEquals(1, ((Map) foo.get(UpdateOp.COMMIT_ROOT)).get(head)); + assertEquals(1, ((Map) foo.get(UpdateOp.COMMIT_ROOT)).get(head)); head = mk.commit("", "+\"/bar\":{}+\"/test/foo/bar\":{}", head, null); // root node is root of commit rootNode = store.find(Collection.NODES, "0:/"); - assertTrue(((Map) rootNode.get(UpdateOp.REVISIONS)).containsKey(head)); + assertTrue(((Map) rootNode.get(UpdateOp.REVISIONS)).containsKey(head)); // /bar refers to root nodes a commit root Map bar = store.find(Collection.NODES, "1:/bar"); - assertEquals(0, ((Map) bar.get(UpdateOp.COMMIT_ROOT)).get(head)); + assertEquals(0, ((Map) bar.get(UpdateOp.COMMIT_ROOT)).get(head)); // /test/foo/bar refers to root nodes a commit root bar = store.find(Collection.NODES, "3:/test/foo/bar"); - assertEquals(0, ((Map) bar.get(UpdateOp.COMMIT_ROOT)).get(head)); + assertEquals(0, ((Map) bar.get(UpdateOp.COMMIT_ROOT)).get(head)); } finally { mk.dispose();