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();


Reply via email to