Author: mreutegg
Date: Thu Jun 28 13:42:15 2018
New Revision: 1834610
URL: http://svn.apache.org/viewvc?rev=1834610&view=rev
Log:
OAK-7593: NodeDocument.getLatestValue() may throw IllegalStateException
Add ignored test
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
Modified:
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java?rev=1834610&r1=1834609&r2=1834610&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
(original)
+++
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
Thu Jun 28 13:42:15 2018
@@ -31,6 +31,7 @@ import com.google.common.collect.Lists;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import
org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.VersionGCStats;
import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
import org.apache.jackrabbit.oak.plugins.document.util.Utils;
@@ -38,6 +39,7 @@ import org.apache.jackrabbit.oak.spi.com
import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.junit.Ignore;
import org.junit.Test;
import static com.google.common.collect.Maps.newLinkedHashMap;
@@ -861,6 +863,44 @@ public class NodeDocumentTest {
ns2.dispose();
}
+ // OAK-7593
+ @Ignore("OAK-7593")
+ @Test
+ public void getVisibleChangesWithOverlappingRanges() throws Exception {
+ MemoryDocumentStore store = new MemoryDocumentStore();
+ DocumentNodeStore ns = createTestStore(store, 1, 0);
+ addNode(ns, "/test");
+ setProperty(ns, "/test/p", 1);
+ setProperty(ns, "/test/p", 2);
+ setProperty(ns, "/test/p", 3);
+ RevisionVector readRev = ns.getHeadRevision();
+ setProperty(ns, "/test/q", 1);
+ setProperty(ns, "/test/q", 2);
+
+ String id = Utils.getIdFromPath("/test");
+ NodeDocument doc = store.find(NODES, id);
+ assertNotNull(doc);
+ List<UpdateOp> splitOps = SplitOperations.forDocument(
+ doc, ns, ns.getHeadRevision(), NO_BINARY, 1);
+ assertEquals(2, splitOps.size());
+ store.createOrUpdate(NODES, splitOps);
+
+ setProperty(ns, "/test/p", 4);
+
+ doc = store.find(NODES, id);
+ assertNotNull(doc);
+ splitOps = SplitOperations.forDocument(
+ doc, ns, ns.getHeadRevision(), NO_BINARY, 1);
+ assertEquals(2, splitOps.size());
+ store.createOrUpdate(NODES, splitOps);
+
+ doc = store.find(NODES, id);
+ assertNotNull(doc);
+ for (Map.Entry<Revision, String> change : doc.getVisibleChanges("p",
readRev)) {
+ assertFalse(readRev.isRevisionNewer(change.getKey()));
+ }
+ }
+
@Test
public void getSweepRevisions() throws Exception {
MemoryDocumentStore store = new MemoryDocumentStore();
@@ -1008,4 +1048,29 @@ public class NodeDocumentTest {
throws CommitFailedException {
store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
}
+
+ private void addNode(NodeStore store, String path)
+ throws CommitFailedException {
+ NodeBuilder root = store.getRoot().builder();
+ NodeBuilder builder = root;
+ for (String name : PathUtils.elements(path)) {
+ builder = builder.child(name);
+ }
+ assertTrue(builder.isNew());
+ merge(store, root);
+ }
+
+ private void setProperty(NodeStore store, String path, int value)
+ throws CommitFailedException {
+ NodeBuilder root = store.getRoot().builder();
+ NodeBuilder builder = root;
+ String nodePath = PathUtils.getParentPath(path);
+ String propertyName = PathUtils.getName(path);
+ for (String name : PathUtils.elements(nodePath)) {
+ builder = builder.child(name);
+ }
+ assertFalse(builder.isNew());
+ builder.setProperty(propertyName, value);
+ merge(store, root);
+ }
}