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/05/22 18:14:45 UTC

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

Author: mreutegg
Date: Thu May 22 16:14:44 2014
New Revision: 1596910

URL: http://svn.apache.org/r1596910
Log:
OAK-1727: Cross foreign cluster revision comparison may be wrong

Modified:
    jackrabbit/oak/branches/1.0/   (props changed)
    jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java
    jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java

Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
  Merged /jackrabbit/oak/trunk:r1589741

Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java?rev=1596910&r1=1596909&r2=1596910&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/Revision.java Thu May 22 16:14:44 2014
@@ -521,9 +521,14 @@ public class Revision {
             if (range1 == FUTURE && range2 == FUTURE) {
                 return o1.compareRevisionTimeThenClusterId(o2);
             }
-            if (range1 == null || range2 == null) {
+            if (range1 == null && range2 == null) {
                 return o1.compareRevisionTimeThenClusterId(o2);
             }
+            if (range1 == null) {
+                return -1;
+            } else if (range2 == null) {
+                return 1;
+            }
             int comp = range1.compareRevisionTimeThenClusterId(range2);
             if (comp != 0) {
                 return comp;

Modified: jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java?rev=1596910&r1=1596909&r2=1596910&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/RevisionTest.java Thu May 22 16:14:44 2014
@@ -221,6 +221,35 @@ public class RevisionTest {
         assertTrue(comp.compare(r1c2, r2c1) < 0);
     }
 
+    // OAK-1727
+    @Test
+    public void clusterCompare2() {
+        RevisionComparator comp = new RevisionComparator(1);
+
+        comp.add(Revision.fromString("r3-0-1"), Revision.fromString("r1-1-0"));
+
+        Revision r1 = Revision.fromString("r1-0-2");
+        Revision r2 = Revision.fromString("r4-0-2");
+
+        // cluster sync
+        Revision c1sync = Revision.fromString("r5-0-1");
+        comp.add(c1sync,  Revision.fromString("r2-0-0"));
+        Revision c2sync = Revision.fromString("r4-1-2");
+        comp.add(c2sync,  Revision.fromString("r2-1-0"));
+        Revision c3sync = Revision.fromString("r2-0-3");
+        comp.add(c3sync,  Revision.fromString("r2-1-0"));
+
+        assertTrue(comp.compare(r1, r2) < 0);
+        assertTrue(comp.compare(r2, c2sync) < 0);
+        // same seen-at revision, but clusterId 2 < 3
+        assertTrue(comp.compare(c2sync, c3sync) < 0);
+
+        // this means, c3sync must be after r1 and r2
+        // because: r1 < r2 < c2sync < c3sync
+        assertTrue(comp.compare(r1, c3sync) < 0);
+        assertTrue(comp.compare(r2, c3sync) < 0);
+    }
+
     @Test
     public void revisionSeen() {
         RevisionComparator comp = new RevisionComparator(1);