You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2019/08/29 15:08:35 UTC

svn commit: r1866080 - in /jackrabbit/oak/trunk/oak-store-document/src: main/java/org/apache/jackrabbit/oak/plugins/document/ test/java/org/apache/jackrabbit/oak/plugins/document/

Author: mreutegg
Date: Thu Aug 29 15:08:35 2019
New Revision: 1866080

URL: http://svn.apache.org/viewvc?rev=1866080&view=rev
Log:
OAK-8585: Improve exception message on conflict

Modified:
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Branch.java
    jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
    jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Branch.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Branch.java?rev=1866080&r1=1866079&r2=1866080&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Branch.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Branch.java Thu Aug 29 15:08:35 2019
@@ -288,6 +288,20 @@ class Branch {
         return Iterables.concat(paths);
     }
 
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        base.toStringBuilder(sb).append("[");
+        String separator = "";
+        for (Map.Entry<Revision, BranchCommit> c : commits.entrySet()) {
+            sb.append(separator);
+            separator = ",";
+            sb.append(c.getKey()).append("->").append(c.getValue());
+        }
+        sb.append("]");
+        return sb.toString();
+    }
+
     /**
      * Information about a commit within a branch.
      */

Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java?rev=1866080&r1=1866079&r2=1866080&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/Commit.java Thu Aug 29 15:08:35 2019
@@ -551,13 +551,15 @@ public class Commit {
         collisions.clear();
         if (baseRevision != null) {
             Revision newestRev = null;
+            Branch branch = null;
             if (before != null) {
                 RevisionVector base = baseRevision;
                 if (nodeStore.isDisableBranches()) {
                     base = base.asTrunkRevision();
                 }
+                branch = getBranch();
                 newestRev = before.getNewestRevision(
-                        nodeStore, base, revision, getBranch(), collisions);
+                        nodeStore, base, revision, branch, collisions);
             }
             String conflictMessage = null;
             Set<Revision> conflictRevisions = Sets.newHashSet();
@@ -565,7 +567,8 @@ public class Commit {
                 if ((op.isDelete() || !op.isNew())
                         && !allowConcurrentAddRemove(before, op)) {
                     conflictMessage = "The node " +
-                            op.getId() + " does not exist or is already deleted";
+                            op.getId() + " does not exist or is already deleted " +
+                            "at base revision " + baseRevision + ", branch: " + branch;
                     if (before != null && !before.getLocalDeleted().isEmpty()) {
                         conflictRevisions.add(before.getLocalDeleted().firstKey());
                     }
@@ -614,7 +617,7 @@ public class Commit {
                 }
             }
             if (conflictMessage != null) {
-                conflictMessage += ", before\n" + revision;
+                conflictMessage += ", commit revision: " + revision;
                 if (LOG.isDebugEnabled()) {
                     LOG.debug(conflictMessage  + "; document:\n" +
                             (before == null ? "" : before.format()));

Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java?rev=1866080&r1=1866079&r2=1866080&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CommitTest.java Thu Aug 29 15:08:35 2019
@@ -22,10 +22,14 @@ package org.apache.jackrabbit.oak.plugin
 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.hamcrest.Matchers;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.apache.jackrabbit.oak.plugins.document.TestUtils.merge;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -130,6 +134,35 @@ public class CommitTest {
             }
         } finally {
             ns.canceled(c);
+        }
+    }
+
+    // OAK-8585
+    @Test
+    public void alreadyDeletedMessage() throws Exception {
+        DocumentNodeStore ns = builderProvider.newBuilder().getNodeStore();
+
+        NodeBuilder builder = ns.getRoot().builder();
+        builder.child("foo");
+        merge(ns, builder);
+        builder = ns.getRoot().builder();
+        builder.child("foo").remove();
+        merge(ns, builder);
+
+        Commit c = ns.newCommit(changes -> {
+            changes.removeNode(Path.fromString("/foo"), EMPTY_NODE);
+        }, ns.getHeadRevision().asBranchRevision(ns.getClusterId()), null);
+        try {
+            try {
+                c.apply();
+                fail("commit must fail");
+            } catch (ConflictException e) {
+                // expected
+                assertThat(e.getMessage(), containsString("base revision"));
+                assertThat(e.getMessage(), containsString("branch"));
+            }
+        } finally {
+            ns.canceled(c);
         }
     }
 }