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