Author: mreutegg Date: Thu Sep 22 09:38:44 2016 New Revision: 1761876 URL: http://svn.apache.org/viewvc?rev=1761876&view=rev Log: OAK-4840: Incorrect branch commit value
Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterBranchCommitTest.java (with props) Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java?rev=1761876&r1=1761875&r2=1761876&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java Thu Sep 22 09:38:44 2016 @@ -242,7 +242,7 @@ public class Commit { // regular commits use "c", which makes the commit visible to // other readers. branch commits use the base revision to indicate // the visibility of the commit - String commitValue = baseBranchRevision != null ? baseBranchRevision.toString() : "c"; + String commitValue = baseBranchRevision != null ? baseBranchRevision.getBranchRevision().toString() : "c"; DocumentStore store = nodeStore.getDocumentStore(); String commitRootPath = null; if (baseBranchRevision != null) { Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1761876&r1=1761875&r2=1761876&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java Thu Sep 22 09:38:44 2016 @@ -1962,8 +1962,8 @@ public final class NodeDocument extends } } else { // branch commit (not merged) - RevisionVector branchCommit = RevisionVector.fromString(commitValue); - if (branchCommit.getBranchRevision().getClusterId() != context.getClusterId()) { + Revision branchCommit = Revision.fromString(commitValue); + if (branchCommit.getClusterId() != context.getClusterId()) { // this is an unmerged branch commit from another cluster node, // hence never visible to us return false; Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterBranchCommitTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterBranchCommitTest.java?rev=1761876&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterBranchCommitTest.java (added) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterBranchCommitTest.java Thu Sep 22 09:38:44 2016 @@ -0,0 +1,87 @@ +/* + * 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.oak.plugins.document; + +import org.apache.jackrabbit.oak.api.CommitFailedException; +import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore; +import org.apache.jackrabbit.oak.plugins.document.util.Utils; +import org.apache.jackrabbit.oak.spi.commit.CommitInfo; +import org.apache.jackrabbit.oak.spi.commit.EmptyHook; +import org.apache.jackrabbit.oak.spi.state.NodeBuilder; +import org.apache.jackrabbit.oak.spi.state.NodeState; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class ClusterBranchCommitTest { + + @Rule + public final DocumentMKBuilderProvider builderProvider = new DocumentMKBuilderProvider(); + + private DocumentNodeStore ns1; + private DocumentNodeStore ns2; + + @Before + public void before() { + DocumentStore store = new MemoryDocumentStore(); + ns1 = builderProvider.newBuilder().setDocumentStore(store) + .setAsyncDelay(0).setClusterId(1).getNodeStore(); + ns2 = builderProvider.newBuilder().setDocumentStore(store) + .setAsyncDelay(0).setClusterId(2).getNodeStore(); + } + + @Test + public void branchCommit() throws Exception { + NodeBuilder builder = ns1.getRoot().builder(); + builder.child("test"); + merge(ns1, builder); + ns1.runBackgroundOperations(); + ns2.runBackgroundOperations(); + + int bc = numBranchCommits(ns2); + builder = ns2.getRoot().builder(); + int i = 0; + while (bc == numBranchCommits(ns2)) { + builder.child("node-" + i++); + } + NodeDocument root = Utils.getRootDocument(ns2.getDocumentStore()); + for (String tag : root.getLocalRevisions().values()) { + if (!Utils.isCommitted(tag)) { + assertEquals(2, Revision.fromString(tag).getClusterId()); + assertTrue(tag.startsWith("br")); + } + } + } + + private int numBranchCommits(DocumentNodeStore ns) { + int num = 0; + NodeDocument root = Utils.getRootDocument(ns.getDocumentStore()); + for (String tag : root.getLocalRevisions().values()) { + num += Utils.isCommitted(tag) ? 0 : 1; + } + return num; + } + + private static NodeState merge(DocumentNodeStore ns, + NodeBuilder builder) + throws CommitFailedException { + return ns.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY); + } +} Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/ClusterBranchCommitTest.java ------------------------------------------------------------------------------ svn:eol-style = native