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 13581EDE0 for ; Tue, 8 Jan 2013 16:07:46 +0000 (UTC) Received: (qmail 16225 invoked by uid 500); 8 Jan 2013 16:07:46 -0000 Delivered-To: apmail-jackrabbit-oak-commits-archive@jackrabbit.apache.org Received: (qmail 16209 invoked by uid 500); 8 Jan 2013 16:07:46 -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 16201 invoked by uid 99); 8 Jan 2013 16:07:45 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Jan 2013 16:07:45 +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, 08 Jan 2013 16:07:44 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 5536F2388847; Tue, 8 Jan 2013 16:07:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1430348 - /jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/command/MergeCommand.java Date: Tue, 08 Jan 2013 16:07:25 -0000 To: oak-commits@jackrabbit.apache.org From: meteatamel@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130108160725.5536F2388847@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: meteatamel Date: Tue Jan 8 16:07:24 2013 New Revision: 1430348 URL: http://svn.apache.org/viewvc?rev=1430348&view=rev Log: OAK-535 - MergeCommand reads complete tree into memory Removed one of the getNodes call by reusing the result of a previous getNodes call Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/command/MergeCommand.java Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/command/MergeCommand.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/command/MergeCommand.java?rev=1430348&r1=1430347&r2=1430348&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/command/MergeCommand.java (original) +++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/command/MergeCommand.java Tue Jan 8 16:07:24 2013 @@ -1,5 +1,6 @@ package org.apache.jackrabbit.mongomk.impl.command; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -66,9 +67,8 @@ public class MergeCommand extends BaseCo long branchRootId = Long.parseLong(branchId.substring(0, branchId.indexOf("-"))); // Merge nodes from head to branch. - ourRoot = mergeNodes(ourRoot, currentHead, branchRootId); - Node currentHeadNode = getNode("/", currentHead); + ourRoot = mergeNodes(ourRoot, currentHeadNode, branchRootId); String diff = new DiffBuilder(MongoUtil.wrap(currentHeadNode), MongoUtil.wrap(ourRoot), "/", -1, @@ -88,14 +88,14 @@ public class MergeCommand extends BaseCo return MongoUtil.fromMongoRepresentation(revision); } - private NodeImpl mergeNodes(Node ourRoot, Long newBaseRevisionId, + private NodeImpl mergeNodes(Node ourRoot, Node theirRoot, Long commonAncestorRevisionId) throws Exception { Node baseRoot = getNode("/", commonAncestorRevisionId); - Node theirRoot = getNode("/", newBaseRevisionId); + Node theirRootCopy = copy(theirRoot); // Recursively merge 'our' changes with 'their' changes... - NodeImpl mergedNode = mergeNode(baseRoot, ourRoot, theirRoot, "/"); + NodeImpl mergedNode = mergeNode(baseRoot, ourRoot, theirRootCopy, "/"); return mergedNode; } @@ -182,4 +182,17 @@ public class MergeCommand extends BaseCo command.setBranchId(branchId); return command.execute(); } + + private NodeImpl copy(Node node) { + NodeImpl copy = new NodeImpl(node.getPath()); + copy.setRevisionId(node.getRevisionId()); + for (Map.Entry entry : node.getProperties().entrySet()) { + copy.addProperty(entry.getKey(), entry.getValue()); + } + for (Iterator it = node.getChildNodeEntries(0, -1); it.hasNext(); ) { + Node child = it.next(); + copy.addChildNodeEntry(copy(child)); + } + return copy; + } } \ No newline at end of file