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 3F4C0DE6C for ; Thu, 8 Nov 2012 15:18:35 +0000 (UTC) Received: (qmail 67478 invoked by uid 500); 8 Nov 2012 15:18:34 -0000 Delivered-To: apmail-jackrabbit-oak-commits-archive@jackrabbit.apache.org Received: (qmail 67417 invoked by uid 500); 8 Nov 2012 15:18:34 -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 67335 invoked by uid 99); 8 Nov 2012 15:18:34 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 08 Nov 2012 15:18:34 +0000 X-ASF-Spam-Status: No, hits=-1999.0 required=5.0 tests=ALL_TRUSTED,FRT_ADOBE2 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; Thu, 08 Nov 2012 15:18:29 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 615132388A3F; Thu, 8 Nov 2012 15:18:09 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1407119 [2/9] - in /jackrabbit/oak/trunk: ./ oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/ oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/ oak-mk-perf/ oak-mk-perf/src/main/java/org/apache/jackrabbit/mk/tasks/ oak-... Date: Thu, 08 Nov 2012 15:18:02 -0000 To: oak-commits@jackrabbit.apache.org From: mduerig@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20121108151809.615132388A3F@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: jackrabbit/oak/trunk/oak-mk-perf/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelOperation.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-perf/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelOperation.java?rev=1407119&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-mk-perf/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelOperation.java (added) +++ jackrabbit/oak/trunk/oak-mk-perf/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelOperation.java Thu Nov 8 15:17:50 2012 @@ -0,0 +1,73 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.mk.util; + + + +/** + * Useful methods for building node structure. + * + * + */ +public class MicroKernelOperation { + + /** + * Builds a diff representing a pyramid node structure. + * + * @param The + * path where the first node will be added. + * @param index + * @param numberOfChildren + * The number of children that each node must have. + * @param nodesNumber + * Total number of nodes. + * @param nodePrefixName + * The node name prefix. + * @param diff + * The string where the diff is builded.Put an empty string for + * creating a new structure. + * @return + */ + public static StringBuilder buildPyramidDiff(String startingPoint, + int index, int numberOfChildren, long nodesNumber, + String nodePrefixName, StringBuilder diff) { + if (numberOfChildren == 0) { + for (long i = 0; i < nodesNumber; i++) + diff.append(addNodeToDiff(startingPoint, nodePrefixName + i)); + return diff; + } + if (index >= nodesNumber) + return diff; + diff.append(addNodeToDiff(startingPoint, nodePrefixName + index)); + //System.out.println("Create node "+ index); + for (int i = 1; i <= numberOfChildren; i++) { + if (!startingPoint.endsWith("/")) + startingPoint = startingPoint + "/"; + buildPyramidDiff(startingPoint + nodePrefixName + index, index + * numberOfChildren + i, numberOfChildren, nodesNumber, + nodePrefixName, diff); + } + return diff; + } + + private static String addNodeToDiff(String startingPoint, String nodeName) { + if (!startingPoint.endsWith("/")) + startingPoint = startingPoint + "/"; + + return ("+\"" + startingPoint + nodeName + "\" : {\"key\":\"00000000000000000000\"} \n"); + } +} Propchange: jackrabbit/oak/trunk/oak-mk-perf/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelOperation.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/oak/trunk/oak-mk-perf/src/main/java/org/apache/jackrabbit/mk/util/MicroKernelOperation.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL Modified: jackrabbit/oak/trunk/oak-mk-perf/src/main/resources/config.cfg URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-perf/src/main/resources/config.cfg?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mk-perf/src/main/resources/config.cfg (original) +++ jackrabbit/oak/trunk/oak-mk-perf/src/main/resources/config.cfg Thu Nov 8 15:17:50 2012 @@ -1,3 +1,20 @@ +######################################################################### +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################## + mk.type=oak hostname=localhost mongo.port=27017 Modified: jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MKAddNodesRelativePathTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MKAddNodesRelativePathTest.java?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MKAddNodesRelativePathTest.java (original) +++ jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MKAddNodesRelativePathTest.java Thu Nov 8 15:17:50 2012 @@ -16,59 +16,50 @@ */ package org.apache.jackrabbit.mk.tests; -import org.apache.jackrabbit.mk.util.MKOperation; import org.apache.jackrabbit.mk.testing.MicroKernelTestBase; +import org.apache.jackrabbit.mk.util.Committer; import org.junit.Test; /** * Measure the time needed for writing nodes in different tree structures.Each - * node is committed separately.Each node is also committed using the relative path of - * the parent node. - * - * @author rogoz - * + * node is committed separately.Each node is also committed using the relative + * path of the parent node. */ - public class MKAddNodesRelativePathTest extends MicroKernelTestBase { - static String nodeNamePrefix = "N"; - static int nodesNumber = 1000; + static String nodeNamePrefix = "N"; + static int nodesNumber = 1000; - /** - * Writes all the nodes on the same level.All the nodes have the same - * parent. - * - * @throws Exception - */ - - @Test - public void testWriteNodesSameLevel() throws Exception { - - chronometer.start(); - MKOperation.addPyramidStructure(mk, "/", 0, 0, nodesNumber, - nodeNamePrefix); - chronometer.stop(); - System.out.println("Total time for testWriteNodesSameLevel is " - + chronometer.getSeconds()); - } - - @Test - public void testWriteNodes10Children() { - chronometer.start(); - MKOperation.addPyramidStructure(mk, "/", 0, 10, nodesNumber, - nodeNamePrefix); - chronometer.stop(); - System.out.println("Total time for testWriteNodes10Children is " - + chronometer.getSeconds()); - } - - @Test - public void testWriteNodes100Children() { - chronometer.start(); - MKOperation.addPyramidStructure(mk, "/", 0, 100, nodesNumber, - nodeNamePrefix); - chronometer.stop(); - System.out.println("Total time for testWriteNodes100Children is " - + chronometer.getSeconds()); - } + @Test + public void testWriteNodesSameLevel() throws Exception { + Committer commiter = new Committer(); + chronometer.start(); + commiter.addPyramidStructure(mk, "/", 0, 0, nodesNumber, nodeNamePrefix); + chronometer.stop(); + System.out.println("Total time for testWriteNodesSameLevel is " + + chronometer.getSeconds()); + } + + @Test + public void testWriteNodes10Children() { + Committer commiter = new Committer(); + chronometer.start(); + + commiter.addPyramidStructure(mk, "/", 0, 10, nodesNumber, + nodeNamePrefix); + chronometer.stop(); + System.out.println("Total time for testWriteNodes10Children is " + + chronometer.getSeconds()); + } + + @Test + public void testWriteNodes100Children() { + Committer commiter = new Committer(); + chronometer.start(); + commiter.addPyramidStructure(mk, "/", 0, 100, nodesNumber, + nodeNamePrefix); + chronometer.stop(); + System.out.println("Total time for testWriteNodes100Children is " + + chronometer.getSeconds()); + } } Modified: jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkAddNodesDifferentStructuresTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkAddNodesDifferentStructuresTest.java?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkAddNodesDifferentStructuresTest.java (original) +++ jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkAddNodesDifferentStructuresTest.java Thu Nov 8 15:17:50 2012 @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.mk.tests; -import org.apache.jackrabbit.mk.util.MKOperation; +import org.apache.jackrabbit.mk.util.MicroKernelOperation; import org.apache.jackrabbit.mk.testing.MicroKernelTestBase; import org.apache.jackrabbit.mk.util.Committer; import org.junit.Test; @@ -24,77 +24,115 @@ import org.junit.Test; /** * Measure the time needed for writing nodes in different tree structures.All * the nodes are added in a single commit. - * - * @author rogoz - * */ public class MkAddNodesDifferentStructuresTest extends MicroKernelTestBase { - static int nodesNumber = 100000; - static String nodeNamePrefix = "N"; + static long nodesNumber = 100; + static String nodeNamePrefix = "N"; - @Test - public void testWriteNodesSameLevel() { - - String diff = MKOperation.buildPyramidDiff("/", 0, 0, nodesNumber, - nodeNamePrefix, new StringBuilder()).toString(); - Committer committer = new Committer(); - chronometer.start(); - committer.addNodes(mk, diff, 0); - chronometer.stop(); - System.out.println("Total time for testWriteNodesSameLevel is " - + chronometer.getSeconds()); - } - - @Test - public void testWriteNodes1Child() { - int nodesNumber = 100; - - String diff = MKOperation.buildPyramidDiff("/", 0, 1, nodesNumber, - nodeNamePrefix, new StringBuilder()).toString(); - Committer committer = new Committer(); - chronometer.start(); - committer.addNodes(mk, diff, 0); - chronometer.stop(); - System.out.println("Total time for testWriteNodes1Child is " - + chronometer.getSeconds()); - } - - @Test - public void testWriteNodes10Children() { - - String diff = MKOperation.buildPyramidDiff("/", 0, 10, nodesNumber, - nodeNamePrefix, new StringBuilder()).toString(); - Committer committer = new Committer(); - chronometer.start(); - committer.addNodes(mk, diff, 0); - chronometer.stop(); - System.out.println("Total time for testWriteNodes10Children is " - + chronometer.getSeconds()); - } - - @Test - public void testWriteNodes100Children() { - - String diff = MKOperation.buildPyramidDiff("/", 0, 100, nodesNumber, - nodeNamePrefix, new StringBuilder()).toString(); - Committer committer = new Committer(); - chronometer.start(); - committer.addNodes(mk, diff, 0); - chronometer.stop(); - System.out.println("Total time for testWriteNodes100Children is " - + chronometer.getSeconds()); - } - - @Test - public void testWriteNodes1000Children() { - String diff = MKOperation.buildPyramidDiff("/", 0, 1000, nodesNumber, - nodeNamePrefix, new StringBuilder()).toString(); - Committer committer = new Committer(); - chronometer.start(); - committer.addNodes(mk, diff, 0); - chronometer.stop(); - System.out.println("Total time for testWriteNodes1000Children is " - + chronometer.getSeconds()); - } + /** + * Tree structure: + *

+ * rootNode (/) + *

+ * N0 N1... Nn-1 Nn + */ + @Test + public void testWriteNodesSameLevel() { + + String diff = MicroKernelOperation.buildPyramidDiff("/", 0, 0, + nodesNumber, nodeNamePrefix, new StringBuilder()).toString(); + Committer committer = new Committer(); + chronometer.start(); + committer.addNodes(mk, diff, 0); + chronometer.stop(); + System.out.println("Total time for testWriteNodesSameLevel is " + + chronometer.getSeconds()); + } + + /** + * Tree structure: + *

+ * rootNode (/) + *

+ * N0 + *

+ * N1 + *

+ * N2 + *

+ * N3 + */ + @Test + public void testWriteNodes1Child() { + int nodesNumber = 100; + + String diff = MicroKernelOperation.buildPyramidDiff("/", 0, 1, + nodesNumber, nodeNamePrefix, new StringBuilder()).toString(); + Committer committer = new Committer(); + chronometer.start(); + committer.addNodes(mk, diff, 0); + chronometer.stop(); + System.out.println("Total time for testWriteNodes1Child is " + + chronometer.getSeconds()); + } + + /** + * Tree structure: + *

+ * Number of nodes per level =10^(level). + *

+ * Each node has 10 children. + */ + @Test + public void testWriteNodes10Children() { + + String diff = MicroKernelOperation.buildPyramidDiff("/", 0, 10, + nodesNumber, nodeNamePrefix, new StringBuilder()).toString(); + Committer committer = new Committer(); + chronometer.start(); + committer.addNodes(mk, diff, 0); + chronometer.stop(); + System.out.println("Total time for testWriteNodes10Children is " + + chronometer.getSeconds()); + } + + /** + * Tree structure: + *

+ * Number of nodes per level =100^(level). + *

+ * Each node has 100 children. + */ + @Test + public void testWriteNodes100Children() { + + String diff = MicroKernelOperation.buildPyramidDiff("/", 0, 100, + nodesNumber, nodeNamePrefix, new StringBuilder()).toString(); + Committer committer = new Committer(); + chronometer.start(); + committer.addNodes(mk, diff, 0); + chronometer.stop(); + System.out.println("Total time for testWriteNodes100Children is " + + chronometer.getSeconds()); + } + + /** + * Tree structure: + *

+ * Number of nodes per level =1000^(level). + *

+ * Each node has 1000 children. + */ + @Test + public void testWriteNodes1000Children() { + String diff = MicroKernelOperation.buildPyramidDiff("/", 0, 1000, + nodesNumber, nodeNamePrefix, new StringBuilder()).toString(); + Committer committer = new Committer(); + chronometer.start(); + committer.addNodes(mk, diff, 0); + chronometer.stop(); + System.out.println("Total time for testWriteNodes1000Children is " + + chronometer.getSeconds()); + } } Modified: jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkAddNodesMultipleCommitsTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkAddNodesMultipleCommitsTest.java?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkAddNodesMultipleCommitsTest.java (original) +++ jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkAddNodesMultipleCommitsTest.java Thu Nov 8 15:17:50 2012 @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.mk.tests; -import org.apache.jackrabbit.mk.util.MKOperation; +import org.apache.jackrabbit.mk.util.MicroKernelOperation; import org.apache.jackrabbit.mk.testing.MicroKernelTestBase; import org.apache.jackrabbit.mk.util.Committer; import org.junit.BeforeClass; @@ -24,66 +24,68 @@ import org.junit.Test; /** * Measure the time needed for writing the same node structure in one or - * multiple commit steps . - * - * @author rogoz - * + * multiple commit steps. + *

+ * Tree structure: + *

+ * Number of nodes per level =100^(level). + *

+ * Each node has 100 children. */ public class MkAddNodesMultipleCommitsTest extends MicroKernelTestBase { - static String diff; - static int nodesNumber = 10000; - static String nodeNamePrefix = "N"; - - @BeforeClass - public static void prepareDiff() { - diff = MKOperation.buildPyramidDiff("/", 0, 100, nodesNumber, - nodeNamePrefix, new StringBuilder()).toString(); - } - - @Test - public void testWriteNodesAllNodes1Commit() { - - Committer commiter = new Committer(); - chronometer.start(); - commiter.addNodes(mk, diff, 0); - chronometer.stop(); - System.out.println("Total time for testWriteNodesAllNodes1Commit is " - + chronometer.getSeconds()); - } - - @Test - public void testWriteNodes1NodePerCommit() { - - Committer commiter = new Committer(); - chronometer.start(); - commiter.addNodes(mk, diff, 1); - chronometer.stop(); - System.out.println("Total time for testWriteNodes1NodePerCommit is " - + chronometer.getSeconds()); - } - - @Test - public void testWriteNodes50NodesPerCommit() { - - Committer commiter = new Committer(); - chronometer.start(); - commiter.addNodes(mk, diff, 50); - chronometer.stop(); - System.out.println("Total time for testWriteNodes50NodesPerCommit is " - + chronometer.getSeconds()); - } - - @Test - public void testWriteNodes1000NodesPerCommit() { - - Committer commiter = new Committer(); - chronometer.start(); - commiter.addNodes(mk, diff, 1000); - chronometer.stop(); - System.out - .println("Total time for testWriteNodes1000NodesPerCommit is " - + chronometer.getSeconds()); - } - -} + static String diff; + static int nodesNumber = 1000; + static String nodeNamePrefix = "N"; + + @BeforeClass + public static void prepareDiff() { + diff = MicroKernelOperation.buildPyramidDiff("/", 0, 10, nodesNumber, + nodeNamePrefix, new StringBuilder()).toString(); + } + + @Test + public void testWriteNodesAllNodes1Commit() { + + Committer commiter = new Committer(); + chronometer.start(); + commiter.addNodes(mk, diff, 0); + chronometer.stop(); + System.out.println("Total time for testWriteNodesAllNodes1Commit is " + + chronometer.getSeconds()); + } + + @Test + public void testWriteNodes1NodePerCommit() { + + Committer commiter = new Committer(); + chronometer.start(); + commiter.addNodes(mk, diff, 1); + chronometer.stop(); + System.out.println("Total time for testWriteNodes1NodePerCommit is " + + chronometer.getSeconds()); + } + + @Test + public void testWriteNodes50NodesPerCommit() { + + Committer commiter = new Committer(); + chronometer.start(); + commiter.addNodes(mk, diff, 50); + chronometer.stop(); + System.out.println("Total time for testWriteNodes50NodesPerCommit is " + + chronometer.getSeconds()); + } + + @Test + public void testWriteNodes1000NodesPerCommit() { + + Committer commiter = new Committer(); + chronometer.start(); + commiter.addNodes(mk, diff, 10); + chronometer.stop(); + System.out + .println("Total time for testWriteNodes1000NodesPerCommit is " + + chronometer.getSeconds()); + } +} \ No newline at end of file Added: jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodes1CommitTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodes1CommitTest.java?rev=1407119&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodes1CommitTest.java (added) +++ jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodes1CommitTest.java Thu Nov 8 15:17:50 2012 @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.mk.tests; + +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import org.apache.jackrabbit.mk.tasks.GenericWriteTask; +import org.apache.jackrabbit.mk.testing.ConcurrentMicroKernelTestBase; +import org.apache.jackrabbit.mk.util.MicroKernelOperation; +import org.junit.Test; + +/** + * Test class for microkernel concurrent writing.All the nodes are added in a + * single commit. + */ +public class MkConcurrentAddNodes1CommitTest extends ConcurrentMicroKernelTestBase { + + // nodes for each worker + int nodesNumber = 100; + + /** + @Rule + public CatchAllExceptionsRule catchAllExceptionsRule = new CatchAllExceptionsRule(); +**/ + @Test + public void testConcurentWritingFlatStructure() throws InterruptedException { + + ArrayList tasks = new ArrayList(); + String diff; + for (int i = 0; i < mkNumber; i++) { + diff = MicroKernelOperation.buildPyramidDiff("/", 0, 0, + nodesNumber, "N" + i + "N", new StringBuilder()).toString(); + tasks.add(new GenericWriteTask(mks.get(i), diff, 0)); + System.out.println("The diff size is " + diff.getBytes().length); + } + + ExecutorService threadExecutor = Executors.newFixedThreadPool(mkNumber); + chronometer.start(); + for (GenericWriteTask genericWriteTask : tasks) { + threadExecutor.execute(genericWriteTask); + } + threadExecutor.shutdown(); + threadExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + chronometer.stop(); + System.out.println("Total time for is " + chronometer.getSeconds()); + } + + @Test + public void testConcurentWritingPyramid1() throws InterruptedException { + + ArrayList tasks = new ArrayList(); + String diff; + for (int i = 0; i < mkNumber; i++) { + diff = MicroKernelOperation.buildPyramidDiff("/", 0, 10, + nodesNumber, "N" + i + "N", new StringBuilder()).toString(); + tasks.add(new GenericWriteTask(mks.get(i), diff, 0)); + System.out.println("The diff size is " + diff.getBytes().length); + } + + ExecutorService threadExecutor = Executors.newFixedThreadPool(mkNumber); + chronometer.start(); + for (GenericWriteTask genericWriteTask : tasks) { + threadExecutor.execute(genericWriteTask); + } + threadExecutor.shutdown(); + threadExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + chronometer.stop(); + System.out.println("Total time is " + chronometer.getSeconds()); + } + + @Test + public void testConcurentWritingPyramid2() throws InterruptedException { + + ArrayList tasks = new ArrayList(); + String diff; + for (int i = 0; i < mkNumber; i++) { + diff = MicroKernelOperation.buildPyramidDiff("/", 0, 10, + nodesNumber, "N" + i + "N", new StringBuilder()).toString(); + tasks.add(new GenericWriteTask(mks.get(i), diff, 0)); + System.out.println("The diff size is " + diff.getBytes().length); + } + + ExecutorService threadExecutor = Executors.newFixedThreadPool(mkNumber); + chronometer.start(); + for (GenericWriteTask genericWriteTask : tasks) { + threadExecutor.execute(genericWriteTask); + } + threadExecutor.shutdown(); + threadExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + chronometer.stop(); + System.out.println("Total time for is " + chronometer.getSeconds()); + } +} Propchange: jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodes1CommitTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodes1CommitTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL Added: jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodesMultipleCommitTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodesMultipleCommitTest.java?rev=1407119&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodesMultipleCommitTest.java (added) +++ jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodesMultipleCommitTest.java Thu Nov 8 15:17:50 2012 @@ -0,0 +1,118 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.mk.tests; + +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import org.apache.jackrabbit.mk.tasks.GenericWriteTask; +import org.apache.jackrabbit.mk.testing.ConcurrentMicroKernelTestBase; +import org.apache.jackrabbit.mk.util.MicroKernelOperation; +import org.junit.Test; + +/** + * Test class for microkernel concurrent writing.The microkernel is adding 1000 + * nodes per commit. + */ +public class MkConcurrentAddNodesMultipleCommitTest extends + ConcurrentMicroKernelTestBase { + + // nodes for each worker + int nodesNumber = 100; + int numberOfNodesPerCommit = 10; + + /** + * @Rule public CatchAllExceptionsRule catchAllExceptionsRule = new + * CatchAllExceptionsRule(); + */ + @Test + public void testConcurentWritingFlatStructure() throws InterruptedException { + + int children = 0; + ArrayList tasks = new ArrayList(); + String diff; + for (int i = 0; i < mkNumber; i++) { + diff = MicroKernelOperation.buildPyramidDiff("/", 0, children, + nodesNumber, "N" + i + "N", new StringBuilder()).toString(); + tasks.add(new GenericWriteTask(mks.get(i), diff, + numberOfNodesPerCommit)); + System.out.println("The diff size is " + diff.getBytes().length); + } + + ExecutorService threadExecutor = Executors.newFixedThreadPool(mkNumber); + chronometer.start(); + for (GenericWriteTask genericWriteTask : tasks) { + threadExecutor.execute(genericWriteTask); + } + threadExecutor.shutdown(); + threadExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + chronometer.stop(); + System.out.println("Total time is " + chronometer.getSeconds()); + } + + @Test + public void testConcurentWritingPyramid1() throws InterruptedException { + int children = 15; + ArrayList tasks = new ArrayList(); + String diff; + for (int i = 0; i < mkNumber; i++) { + diff = MicroKernelOperation.buildPyramidDiff("/", 0, children, + nodesNumber, "N" + i + "N", new StringBuilder()).toString(); + tasks.add(new GenericWriteTask(mks.get(i), diff, + numberOfNodesPerCommit)); + System.out.println("The diff size is " + diff.getBytes().length); + } + + ExecutorService threadExecutor = Executors.newFixedThreadPool(mkNumber); + chronometer.start(); + for (GenericWriteTask genericWriteTask : tasks) { + threadExecutor.execute(genericWriteTask); + } + threadExecutor.shutdown(); + threadExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + chronometer.stop(); + System.out.println("Total time is " + chronometer.getSeconds()); + } + + @Test + public void testConcurentWritingPyramid2() throws InterruptedException { + int children = 2; + ArrayList tasks = new ArrayList(); + String diff; + for (int i = 0; i < mkNumber; i++) { + + diff = MicroKernelOperation.buildPyramidDiff("/", 0, children, + nodesNumber, "N" + i + "N", new StringBuilder()).toString(); + + tasks.add(new GenericWriteTask(mks.get(i), diff, + numberOfNodesPerCommit)); + + } + + ExecutorService threadExecutor = Executors.newFixedThreadPool(mkNumber); + chronometer.start(); + for (GenericWriteTask genericWriteTask : tasks) { + threadExecutor.execute(genericWriteTask); + } + threadExecutor.shutdown(); + threadExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + chronometer.stop(); + System.out.println("Total time for is " + chronometer.getSeconds()); + } +} Propchange: jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodesMultipleCommitTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/oak/trunk/oak-mk-perf/src/test/java/org/apache/jackrabbit/mk/tests/MkConcurrentAddNodesMultipleCommitTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL Modified: jackrabbit/oak/trunk/oak-mongomk-perf/pom.xml URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk-perf/pom.xml?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk-perf/pom.xml (original) +++ jackrabbit/oak/trunk/oak-mongomk-perf/pom.xml Thu Nov 8 15:17:50 2012 @@ -27,21 +27,15 @@ org.apache.jackrabbit oak-parent 0.6-SNAPSHOT + ../oak-parent/pom.xml oak-mongomk-perf + Oak Mongo MicroKernel Performance Test - - org.apache.jackrabbit - oak-mongomk-api - ${project.version} - - - org.apache.jackrabbit - oak-mongomk-impl - ${project.version} - + + org.apache.jackrabbit oak-mongomk @@ -66,6 +60,7 @@ junit junit + Modified: jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/BlobStoreFS.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/BlobStoreFS.java?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/BlobStoreFS.java (original) +++ jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/BlobStoreFS.java Thu Nov 8 15:17:50 2012 @@ -18,14 +18,10 @@ package org.apache.jackrabbit.mongomk.pe import java.io.File; import java.io.InputStream; +import org.apache.jackrabbit.mk.blobs.BlobStore; -import org.apache.jackrabbit.mongomk.api.BlobStore; - -/** - * @author Philipp Marx - */ public class Config { private static final String MASTER_HOST = "master.host"; Modified: jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/MicroKernelPerf.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/MicroKernelPerf.java?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/MicroKernelPerf.java (original) +++ jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/MicroKernelPerf.java Thu Nov 8 15:17:50 2012 @@ -28,9 +28,6 @@ import org.apache.commons.cli.OptionBuil import org.apache.commons.cli.Options; import org.apache.log4j.PropertyConfigurator; -/** - * @author Philipp Marx - */ public class MicroKernelPerfClient { private static class Stats extends BasicDBObject { @@ -67,7 +64,7 @@ public class MicroKernelPerfClient { } @Override - public void propertyAdded(String path, String key, Object value) { + public void propertySet(String path, String key, Object value) { List properties = addedProperties.get(path); if (properties == null) { properties = new LinkedList(); @@ -136,8 +133,8 @@ public class MicroKernelPerfClient { } private void createStats(VerificationHandler handler, JSONObject result) { - long numOfNodes = mongoConnection.getNodeCollection().count(); - long numOfCommits = mongoConnection.getCommitCollection().count(); + long numOfNodes = ((MongoNodeStore)microKernel.getNodeStore()).getNodeCollection().count(); + long numOfCommits = ((MongoNodeStore)microKernel.getNodeStore()).getCommitCollection().count(); Stats commitStats = new Stats("commit", commitMonitor.getLastValue(), numOfCommits, numOfNodes, handler.addedNodes.size() + handler.addedProperties.size()); @@ -150,10 +147,9 @@ public class MicroKernelPerfClient { } private void initMicroKernel() throws Exception { - NodeStore nodeStore = new NodeStoreMongo(mongoConnection); + NodeStore nodeStore = new MongoNodeStore(mongoConnection.getDB()); BlobStore blobStore = new BlobStoreFS(System.getProperty("java.io.tmpdir")); - - microKernel = new MongoMicroKernel(nodeStore, blobStore); + microKernel = new MongoMicroKernel(mongoConnection, nodeStore, blobStore); } private void initMongo() throws Exception { Modified: jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/MicroKernelPerfMaster.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/MicroKernelPerfMaster.java?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/MicroKernelPerfMaster.java (original) +++ jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/MicroKernelPerfMaster.java Thu Nov 8 15:17:50 2012 @@ -19,15 +19,15 @@ package org.apache.jackrabbit.mongomk.pe import java.util.LinkedList; import java.util.List; -import org.apache.jackrabbit.mongomk.MongoConnection; -import org.apache.jackrabbit.mongomk.NodeStoreMongo; -import org.apache.jackrabbit.mongomk.api.BlobStore; +import org.apache.jackrabbit.mk.blobs.BlobStore; import org.apache.jackrabbit.mongomk.api.NodeStore; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.impl.MongoMicroKernel; +import org.apache.jackrabbit.mongomk.impl.MongoNodeStore; import org.apache.jackrabbit.mongomk.impl.json.DefaultJsopHandler; import org.apache.jackrabbit.mongomk.impl.json.JsopParser; -import org.apache.jackrabbit.mongomk.model.CommitMongo; -import org.apache.jackrabbit.mongomk.model.HeadMongo; +import org.apache.jackrabbit.mongomk.impl.model.MongoCommit; +import org.apache.jackrabbit.mongomk.impl.model.MongoSync; import org.apache.jackrabbit.oak.commons.PathUtils; import org.apache.log4j.Logger; import org.json.JSONArray; @@ -38,9 +38,6 @@ import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.QueryBuilder; -/** - * @author commitMongos = this.waitForCommit(); - for (CommitMongo commitMongo : commitMongos) { - if (commitMongo.hasFailed()) { + List commitMongos = this.waitForCommit(); + for (MongoCommit commitMongo : commitMongos) { + if (commitMongo.isFailed()) { LOG.info(String.format("Skipping commit %d because it failed", commitMongo.getRevisionId())); this.lastRevId = commitMongo.getRevisionId(); } else { @@ -150,7 +146,7 @@ public class MicroKernelPerfMaster { } } - private void verifyCommit(CommitMongo commitMongo) throws Exception { + private void verifyCommit(MongoCommit commitMongo) throws Exception { String path = commitMongo.getPath(); String jsop = commitMongo.getDiff(); @@ -165,7 +161,7 @@ public class MicroKernelPerfMaster { LOG.info(String.format("Successfully verified commit %d", commitMongo.getRevisionId())); } - private void verifyCommitOrder(CommitMongo commitMongo) throws Exception { + private void verifyCommitOrder(MongoCommit commitMongo) throws Exception { long baseRevId = commitMongo.getBaseRevisionId(); long revId = commitMongo.getRevisionId(); if (baseRevId != this.lastCommitRevId) { @@ -218,24 +214,24 @@ public class MicroKernelPerfMaster { } } - private List waitForCommit() { + private List waitForCommit() { // TODO Change this to MicroKernel#waitForCommit - List commitMongos = new LinkedList(); + List commitMongos = new LinkedList(); this.lastHeadRevId = 0L; while (true) { LOG.debug("Waiting for commit..."); - DBCollection headCollection = this.mongoConnection.getHeadCollection(); - HeadMongo headMongo = (HeadMongo) headCollection.findOne(); - if (this.lastHeadRevId < headMongo.getHeadRevisionId()) { - DBCollection commitCollection = this.mongoConnection.getCommitCollection(); - DBObject query = QueryBuilder.start(CommitMongo.KEY_REVISION_ID).greaterThan(this.lastRevId) - .and(CommitMongo.KEY_REVISION_ID).lessThanEquals(headMongo.getHeadRevisionId()).get(); - DBObject sort = QueryBuilder.start(CommitMongo.KEY_REVISION_ID).is(1).get(); + DBCollection headCollection = ((MongoNodeStore)microKernel.getNodeStore()).getSyncCollection(); + MongoSync syncMongo = (MongoSync) headCollection.findOne(); + if (this.lastHeadRevId < syncMongo.getHeadRevisionId()) { + DBCollection commitCollection = ((MongoNodeStore)microKernel.getNodeStore()).getCommitCollection(); + DBObject query = QueryBuilder.start(MongoCommit.KEY_REVISION_ID).greaterThan(this.lastRevId) + .and(MongoCommit.KEY_REVISION_ID).lessThanEquals(syncMongo.getHeadRevisionId()).get(); + DBObject sort = QueryBuilder.start(MongoCommit.KEY_REVISION_ID).is(1).get(); DBCursor dbCursor = commitCollection.find(query).sort(sort); while (dbCursor.hasNext()) { - commitMongos.add((CommitMongo) dbCursor.next()); + commitMongos.add((MongoCommit) dbCursor.next()); } if (commitMongos.size() > 0) { @@ -243,7 +239,7 @@ public class MicroKernelPerfMaster { break; } - this.lastHeadRevId = headMongo.getHeadRevisionId(); + this.lastHeadRevId = syncMongo.getHeadRevisionId(); } try { Thread.sleep(2000); Modified: jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/PrepareEnvironment.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/PrepareEnvironment.java?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/PrepareEnvironment.java (original) +++ jackrabbit/oak/trunk/oak-mongomk-perf/src/main/java/org/apache/jackrabbit/mongomk/perf/PrepareEnvironment.java Thu Nov 8 15:17:50 2012 @@ -16,14 +16,9 @@ */ package org.apache.jackrabbit.mongomk.perf; -import org.apache.jackrabbit.mongomk.MongoConnection; -import org.apache.jackrabbit.mongomk.util.MongoUtil; +import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.log4j.Logger; - -/** - * @author test + + ch.qos.logback + logback-classic + 1.0.1 + test + + Modified: jackrabbit/oak/trunk/oak-mongomk-test/src/test/java/org/apache/jackrabbit/mongomk/test/it/MongoMicroKernelFixture.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk-test/src/test/java/org/apache/jackrabbit/mongomk/test/it/MongoMicroKernelFixture.java?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk-test/src/test/java/org/apache/jackrabbit/mongomk/test/it/MongoMicroKernelFixture.java (original) +++ jackrabbit/oak/trunk/oak-mongomk-test/src/test/java/org/apache/jackrabbit/mongomk/test/it/MongoMicroKernelFixture.java Thu Nov 8 15:17:50 2012 @@ -20,23 +20,20 @@ import java.io.InputStream; import java.util.Properties; import org.apache.jackrabbit.mk.api.MicroKernel; +import org.apache.jackrabbit.mk.blobs.BlobStore; import org.apache.jackrabbit.mk.test.MicroKernelFixture; -import org.apache.jackrabbit.mongomk.api.BlobStore; -import org.apache.jackrabbit.mongomk.api.NodeStore; -import org.apache.jackrabbit.mongomk.impl.BlobStoreMongo; import org.apache.jackrabbit.mongomk.impl.MongoConnection; import org.apache.jackrabbit.mongomk.impl.MongoMicroKernel; -import org.apache.jackrabbit.mongomk.impl.NodeStoreMongo; -import org.apache.jackrabbit.mongomk.util.MongoUtil; +import org.apache.jackrabbit.mongomk.impl.MongoNodeStore; +import org.apache.jackrabbit.mongomk.impl.blob.MongoBlobStore; +import org.apache.jackrabbit.mongomk.impl.blob.MongoGridFSBlobStore; import org.junit.Assert; +import com.mongodb.DB; -/** - * @author + + + + + %date{HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n + + + + + target/unit-tests.log + + %date{HH:mm:ss.SSS} %-5level %-40([%thread] %F:%L) %msg%n + + + + + + + + + Propchange: jackrabbit/oak/trunk/oak-mongomk-test/src/test/resources/logback-test.xml ------------------------------------------------------------------------------ svn:eol-style = native Modified: jackrabbit/oak/trunk/oak-mongomk/pom.xml URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/pom.xml?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk/pom.xml (original) +++ jackrabbit/oak/trunk/oak-mongomk/pom.xml Thu Nov 8 15:17:50 2012 @@ -46,7 +46,10 @@ org.apache.jackrabbit.mongomk.* - org.apache.jackrabbit.mongomk.api.* + org.apache.jackrabbit.mongomk.api.*, + org.apache.jackrabbit.mk.model.*, + org.apache.jackrabbit.mk.store.*, + org.apache.jackrabbit.mk.persistence.* org.apache.sling.commons.osgi;inline=org/apache/sling/commons/osgi/PropertiesUtil.class @@ -142,6 +145,11 @@ 1.0.1 test + + com.googlecode.json-simple + json-simple + 1.1 + Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/NodeStore.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/NodeStore.java?rev=1407119&r1=1407118&r2=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/NodeStore.java (original) +++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/NodeStore.java Thu Nov 8 15:17:50 2012 @@ -17,39 +17,54 @@ package org.apache.jackrabbit.mongomk.api; import org.apache.jackrabbit.mk.api.MicroKernel; +import org.apache.jackrabbit.mk.api.MicroKernelException; import org.apache.jackrabbit.mongomk.api.model.Commit; import org.apache.jackrabbit.mongomk.api.model.Node; /** - * The NodeStore interface deals with all node related operations of the {@link MicroKernel}. + * The NodeStore interface deals with all node related operations + * of the {@code MicroKernel}. * *

- * Since binary storage and node storage most likely use different backend technologies two separate interfaces for - * these operations are provided. + * Since binary storage and node storage most likely use different back-end + * technologies two separate interfaces for these operations are provided. *

* *

- * This interface is not only a partly {@code MicroKernel} but also provides a different layer of abstraction by - * converting the {@link String} parameters into higher level objects to ease the development for implementors of the + * This interface is not only a partly {@code MicroKernel} but also provides a + * different layer of abstraction by converting the {@link String} parameters + * into higher level objects to ease the development for implementors of the * {@code MicroKernel}. *

* - * @see BlobStore - * - * @author
- * It adds some functionality for retries and other non business logic related actions (i.e. logging, performance - * tracking, etc). + * It adds some functionality for retries and other non business logic related + * actions (i.e. logging, performance tracking, etc). *

* * @see
Command Pattern * @see CommandExecutor * - * @param - * The result type of the {@code Command}. - * - * @author Command Pattern * @see Command - * - * @author JSOP - * operation. + * FIXME - Remove other interfaces and renamed AddNodeInstructionImpl into + * AddNodeInstruction etc. + * + * An {@code Instruction} is an abstraction of a single + * JSOP operation. * *

- * Each operation is a concrete subinterface of {@code Instruction} and extending it by the specific properties of the - * operation. There is no exact 1 : 1 mapping between a {@code JSOP} operation and a subinterface, i.e. in {@code JSOP} - * there is one add operation for adding nodes and properties whereas there are two specific subinterfaces; one for - * adding a node and one for adding a property. + * Each operation is a concrete sub-interface of {@code Instruction} and extending + * it by the specific properties of the operation. There is no exact 1 : 1 mapping + * between a {@code JSOP} operation and a sub-interface, i.e. in {@code JSOP} there + * is one add operation for adding nodes and properties whereas there are two specific + * sub-interfaces; one for adding a node and one for adding a property. *

- * - * @author "*" STRING ":" STRING */ public interface CopyNodeInstruction extends Instruction { Propchange: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/instruction/Instruction.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/instruction/Instruction.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL Copied: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/instruction/InstructionVisitor.java (from r1407101, jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/model/InstructionVisitor.java) URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/instruction/InstructionVisitor.java?p2=jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/instruction/InstructionVisitor.java&p1=jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/model/InstructionVisitor.java&r1=1407101&r2=1407119&rev=1407119&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/model/InstructionVisitor.java (original) +++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/instruction/InstructionVisitor.java Thu Nov 8 15:17:50 2012 @@ -14,35 +14,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.jackrabbit.mongomk.api.model; +package org.apache.jackrabbit.mongomk.api.instruction; -import org.apache.jackrabbit.mongomk.api.model.Instruction.AddNodeInstruction; -import org.apache.jackrabbit.mongomk.api.model.Instruction.AddPropertyInstruction; -import org.apache.jackrabbit.mongomk.api.model.Instruction.CopyNodeInstruction; -import org.apache.jackrabbit.mongomk.api.model.Instruction.MoveNodeInstruction; -import org.apache.jackrabbit.mongomk.api.model.Instruction.RemoveNodeInstruction; -import org.apache.jackrabbit.mongomk.api.model.Instruction.SetPropertyInstruction; +import org.apache.jackrabbit.mongomk.api.instruction.Instruction.AddNodeInstruction; +import org.apache.jackrabbit.mongomk.api.instruction.Instruction.CopyNodeInstruction; +import org.apache.jackrabbit.mongomk.api.instruction.Instruction.MoveNodeInstruction; +import org.apache.jackrabbit.mongomk.api.instruction.Instruction.RemoveNodeInstruction; +import org.apache.jackrabbit.mongomk.api.instruction.Instruction.SetPropertyInstruction; /** - * A Visitor to iterate through a list of - * {@code Instruction}s without the need to use {@code instanceof} on each item. + * A Visitor to iterate + * through a list of {@code Instruction}s without the need to use {@code instanceof} + * on each item. */ public interface InstructionVisitor { /** * Visits a {@code AddNodeInstruction}. * - * @param instruction - * The instruction. - */ - void visit(AddNodeInstruction instruction); - - /** - * Visits a {@code AddPropertyInstruction}. - * * @param instruction The instruction. */ - void visit(AddPropertyInstruction instruction); + void visit(AddNodeInstruction instruction); /** * Visits a {@code CopyNodeInstruction}. Propchange: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/instruction/InstructionVisitor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/api/instruction/InstructionVisitor.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL