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