You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2014/12/08 10:24:35 UTC

svn commit: r1643767 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java

Author: mreutegg
Date: Mon Dec  8 09:24:35 2014
New Revision: 1643767

URL: http://svn.apache.org/r1643767
Log:
OAK-2318: DocumentNodeStore.diffManyChildren() reads too many nodes

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java?rev=1643767&r1=1643766&r2=1643767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java Mon Dec  8 09:24:35 2014
@@ -554,7 +554,14 @@ public class Revision {
                 return timestamp;
             }
             // go through all known cluster nodes
-            for (List<RevisionRange> list : map.values()) {
+            for (Map.Entry<Integer, List<RevisionRange>> e : map.entrySet()) {
+                if (revision.getClusterId() == currentClusterNodeId
+                        && e.getKey() == currentClusterNodeId) {
+                    // range and revision is for current cluster node
+                    // no need to adjust timestamp
+                    continue;
+                }
+                List<RevisionRange> list = e.getValue();
                 RevisionRange range;
                 for (int i = list.size() - 1; i >= 0; i--) {
                     range = list.get(i);

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java?rev=1643767&r1=1643766&r2=1643767&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java Mon Dec  8 09:24:35 2014
@@ -496,4 +496,19 @@ public class RevisionTest {
         assertEquals(7, comp.getMinimumTimestamp(r17, inactive));
     }
 
+    // OAK-2318
+    @Test
+    public void getMinimumTimestampSingleClusterId() {
+        Map<Integer, Long> inactive = Maps.newHashMap();
+        RevisionComparator comp = new RevisionComparator(1);
+
+        Revision r1 = new Revision(1, 0, 1);
+        comp.add(r1, new Revision(1, 0, 0));
+
+        assertEquals(1, comp.getMinimumTimestamp(r1, inactive));
+
+        Revision r2 = new Revision(2, 0, 1);
+        assertEquals(2, comp.getMinimumTimestamp(r2, inactive));
+    }
+
 }