Author: tomekr
Date: Wed Apr 26 11:08:29 2017
New Revision: 1792732
URL: http://svn.apache.org/viewvc?rev=1792732&view=rev
Log:
OAK-5651: java.lang.IllegalStateException logged when migrating Segment to
Document
Modified:
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalDiffLoaderTest.java
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalEntryTest.java
Modified:
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java?rev=1792732&r1=1792731&r2=1792732&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java
(original)
+++
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/JournalEntry.java
Wed Apr 26 11:08:29 2017
@@ -63,7 +63,7 @@ public final class JournalEntry extends
private static final String CHANGES = "_c";
- private static final String BRANCH_COMMITS = "_bc";
+ static final String BRANCH_COMMITS = "_bc";
public static final String MODIFIED = "_modified";
@@ -274,6 +274,9 @@ public final class JournalEntry extends
}
void branchCommit(@Nonnull Iterable<Revision> revisions) {
+ if (!revisions.iterator().hasNext()) {
+ return;
+ }
String branchCommits = (String) get(BRANCH_COMMITS);
if (branchCommits == null) {
branchCommits = "";
@@ -336,7 +339,9 @@ public final class JournalEntry extends
String bc = (String) get(BRANCH_COMMITS);
if (bc != null) {
for (String id : bc.split(",")) {
- ids.add(id);
+ if (id.length() != 0) {
+ ids.add(id);
+ }
}
}
return new Iterable<JournalEntry>() {
Modified:
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalDiffLoaderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalDiffLoaderTest.java?rev=1792732&r1=1792731&r2=1792732&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalDiffLoaderTest.java
(original)
+++
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalDiffLoaderTest.java
Wed Apr 26 11:08:29 2017
@@ -20,6 +20,7 @@ import java.util.Set;
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;
@@ -162,6 +163,26 @@ public class JournalDiffLoaderTest {
assertEquals(newHashSet("foo", "bar", "baz"), changeChildNodes(ns1,
s1, s2));
}
+ @Test
+ public void emptyBranchCommit() throws Exception {
+ DocumentNodeStore ns = builderProvider.newBuilder()
+ .setAsyncDelay(0).disableBranches().getNodeStore();
+ DocumentStore store = ns.getDocumentStore();
+ DocumentNodeState before = ns.getRoot();
+ String id = Utils.getIdFromPath("/node-0");
+ NodeBuilder builder = ns.getRoot().builder();
+ int i = 0;
+ while (store.find(Collection.NODES, id) == null) {
+ NodeBuilder child = builder.child("node-" + i++);
+ for (int j = 0; j < 20; j++) {
+ child.setProperty("p-" + j, "value");
+ }
+ }
+ merge(ns, builder);
+ DocumentNodeState after = ns.getRoot();
+ new JournalDiffLoader(before, after, ns).call();
+ }
+
private static Set<String> changeChildNodes(DocumentNodeStore store,
AbstractDocumentNodeState
before,
AbstractDocumentNodeState
after) {
Modified:
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalEntryTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalEntryTest.java?rev=1792732&r1=1792731&r2=1792732&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalEntryTest.java
(original)
+++
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/JournalEntryTest.java
Wed Apr 26 11:08:29 2017
@@ -217,6 +217,16 @@ public class JournalEntryTest {
assertEquals(r.getTimestamp(), entry.getRevisionTimestamp());
}
+ @Test
+ public void emptyBranchCommit() {
+ DocumentStore store = new MemoryDocumentStore();
+ JournalEntry entry = JOURNAL.newDocument(store);
+
+ entry.branchCommit(Collections.<Revision>emptyList());
+ assertFalse(entry.getBranchCommits().iterator().hasNext());
+ assertNull(entry.get(JournalEntry.BRANCH_COMMITS));
+ }
+
private static void addRandomPaths(java.util.Collection<String> paths)
throws IOException {
paths.add("/");
Random random = new Random(42);