Author: mreutegg
Date: Wed Apr 24 14:17:49 2019
New Revision: 1858052

URL: http://svn.apache.org/viewvc?rev=1858052&view=rev
Log:
OAK-8272: Orphaned branch commit entries after restart

Commit fix and enable test

Modified:
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
    
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbandonedBranchTest.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1858052&r1=1858051&r2=1858052&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
 Wed Apr 24 14:17:49 2019
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugin
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -555,8 +556,8 @@ public final class NodeDocument extends
     /**
      * Purge the  uncommitted revisions of this document with the
      * local cluster node id as returned by the {@link RevisionContext}. These
-     * are the {@link #REVISIONS} entries where {@link 
Utils#isCommitted(String)}
-     * returns false.
+     * are the {@link #REVISIONS} and {@link #BRANCH_COMMITS} entries where
+     * {@link Utils#isCommitted(String)} returns false.
      *
      * <p>
      *     <bold>Note</bold> - This method should only be invoked upon startup
@@ -570,15 +571,24 @@ public final class NodeDocument extends
     int purgeUncommittedRevisions(RevisionContext context) {
         // only look at revisions in this document.
         // uncommitted revisions are not split off
-        Map<Revision, String> valueMap = getLocalRevisions();
+        Map<Revision, String> localRevisions = getLocalRevisions();
         UpdateOp op = new UpdateOp(getId(), false);
-        int purgeCount = 0;
-        for (Map.Entry<Revision, String> commit : valueMap.entrySet()) {
+        Set<Revision> uniqueRevisions = new HashSet<>();
+        for (Map.Entry<Revision, String> commit : localRevisions.entrySet()) {
             if (!Utils.isCommitted(commit.getValue())) {
                 Revision r = commit.getKey();
                 if (r.getClusterId() == context.getClusterId()) {
-                    purgeCount++;
-                    op.removeMapEntry(REVISIONS, r);
+                    uniqueRevisions.add(r);
+                    removeRevision(op, r);
+                }
+            }
+        }
+        for (Revision r : getLocalBranchCommits()) {
+            String commitValue = localRevisions.get(r);
+            if (!Utils.isCommitted(commitValue)) {
+                if (r.getClusterId() == context.getClusterId()) {
+                    uniqueRevisions.add(r);
+                    removeBranchCommit(op, r);
                 }
             }
         }
@@ -586,7 +596,7 @@ public final class NodeDocument extends
         if (op.hasChanges()) {
             store.findAndUpdate(Collection.NODES, op);
         }
-        return purgeCount;
+        return uniqueRevisions.size();
     }
 
     /**

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbandonedBranchTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbandonedBranchTest.java?rev=1858052&r1=1858051&r2=1858052&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbandonedBranchTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbandonedBranchTest.java
 Wed Apr 24 14:17:49 2019
@@ -19,7 +19,6 @@ package org.apache.jackrabbit.oak.plugin
 import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.util.Utils;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 
@@ -28,7 +27,6 @@ import static org.hamcrest.Matchers.empt
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 
-@Ignore("OAK-8272")
 public class AbandonedBranchTest {
 
     @Rule


Reply via email to