Author: mreutegg
Date: Tue Feb 7 16:26:41 2017
New Revision: 1782029
URL: http://svn.apache.org/viewvc?rev=1782029&view=rev
Log:
OAK-5559: Reduce reads with overlapping previous documents
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java?rev=1782029&r1=1782028&r2=1782029&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/NodeDocument.java
Tue Feb 7 16:26:41 2017
@@ -52,6 +52,7 @@ import org.apache.jackrabbit.oak.commons
import org.apache.jackrabbit.oak.commons.json.JsopTokenizer;
import org.apache.jackrabbit.oak.commons.json.JsopWriter;
import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
+import org.apache.jackrabbit.oak.plugins.document.util.MergeSortedIterators;
import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -1643,8 +1644,34 @@ public final class NodeDocument extends
}
};
} else {
- changes = mergeSorted(transform(copyOf(ranges), rangeToChanges),
- ValueComparator.REVERSE);
+ changes = new Iterable<Entry<Revision, String>>() {
+ private List<Range> rangeList = copyOf(ranges);
+ private Iterable<Iterable<Entry<Revision, String>>>
changesPerRange
+ = transform(rangeList, rangeToChanges);
+ @Override
+ public Iterator<Entry<Revision, String>> iterator() {
+ final Iterator<Iterable<Entry<Revision, String>>> it
+ = checkNotNull(changesPerRange.iterator());
+ return new MergeSortedIterators<Entry<Revision,
String>>(ValueComparator.REVERSE) {
+ @Override
+ public Iterator<Entry<Revision, String>>
nextIterator() {
+ while (it.hasNext()) {
+ Iterator<Entry<Revision, String>> next =
it.next().iterator();
+ // check if this even has elements
+ if (next.hasNext()) {
+ return next;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public String description() {
+ return "Ranges to merge sort: " + rangeList;
+ }
+ };
+ }
+ };
}
return filter(changes, new Predicate<Entry<Revision, String>>() {
@Override
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java?rev=1782029&r1=1782028&r2=1782029&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/NodeDocumentTest.java
Tue Feb 7 16:26:41 2017
@@ -38,7 +38,6 @@ 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;
@@ -760,7 +759,6 @@ public class NodeDocumentTest {
ns2.dispose();
}
- @Ignore("OAK-5559")
@Test
public void readsWithOverlappingPreviousDocuments() throws Exception {
final Map<String, Document> prevDocCalls = newLinkedHashMap();