You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2016/02/26 23:51:55 UTC

[1/6] cassandra git commit: Range.compareTo() violates the contract of Comparable

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.2 941d13dac -> ecbeb0841
  refs/heads/cassandra-3.0 9961b6991 -> d7cb6f61a
  refs/heads/trunk e1a14f502 -> 11d7eb3ba


Range.compareTo() violates the contract of Comparable

patch by jasobrown and blambov for CASSANDRA-11216


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ecbeb084
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ecbeb084
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ecbeb084

Branch: refs/heads/cassandra-2.2
Commit: ecbeb0841e8627fa74a34346e0c380061588366a
Parents: 941d13d
Author: Jason Brown <ja...@gmail.com>
Authored: Fri Feb 26 11:53:03 2016 -0800
Committer: Jason Brown <ja...@gmail.com>
Committed: Fri Feb 26 14:47:57 2016 -0800

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 src/java/org/apache/cassandra/dht/Range.java    | 20 +++++++++++---------
 .../org/apache/cassandra/dht/RangeTest.java     | 15 +++++++++++++++
 3 files changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ecbeb084/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9162165..aa3adf5 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.2.6
+ * Range.compareTo() violates the contract of Comparable (CASSANDRA-11216)
  * Avoid NPE when serializing ErrorMessage with null message (CASSANDRA-11167)
  * Replacing an aggregate with a new version doesn't reset INITCOND (CASSANDRA-10840)
  * (cqlsh) cqlsh cannot be called through symlink (CASSANDRA-11037)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ecbeb084/src/java/org/apache/cassandra/dht/Range.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/Range.java b/src/java/org/apache/cassandra/dht/Range.java
index f2c5996..34e91ea 100644
--- a/src/java/org/apache/cassandra/dht/Range.java
+++ b/src/java/org/apache/cassandra/dht/Range.java
@@ -32,6 +32,8 @@ import org.apache.cassandra.utils.Pair;
  * A Range is responsible for the tokens between (left, right].
  *
  * Used by the partitioner and by map/reduce by-token range scans.
+ *
+ * Note: this class has a natural ordering that is inconsistent with equals
  */
 public class Range<T extends RingPosition<T>> extends AbstractBounds<T> implements Comparable<Range<T>>, Serializable
 {
@@ -254,18 +256,18 @@ public class Range<T extends RingPosition<T>> extends AbstractBounds<T> implemen
        return left.compareTo(right) >= 0;
     }
 
+    /**
+     * Note: this class has a natural ordering that is inconsistent with equals
+     */
     public int compareTo(Range<T> rhs)
     {
-        /*
-         * If the range represented by the "this" pointer
-         * is a wrap around then it is the smaller one.
-         */
-        if ( isWrapAround(left, right) )
-            return -1;
-
-        if ( isWrapAround(rhs.left, rhs.right) )
-            return 1;
+        boolean lhsWrap = isWrapAround(left, right);
+        boolean rhsWrap = isWrapAround(rhs.left, rhs.right);
 
+        // if one of the two wraps, that's the smaller one.
+        if (lhsWrap != rhsWrap)
+            return Boolean.compare(!lhsWrap, !rhsWrap);
+        // otherwise compare by right.
         return right.compareTo(rhs.right);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ecbeb084/test/unit/org/apache/cassandra/dht/RangeTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/dht/RangeTest.java b/test/unit/org/apache/cassandra/dht/RangeTest.java
index 4255487..9fb49cf 100644
--- a/test/unit/org/apache/cassandra/dht/RangeTest.java
+++ b/test/unit/org/apache/cassandra/dht/RangeTest.java
@@ -661,4 +661,19 @@ public class RangeTest
     {
         return new Murmur3Partitioner.LongToken(t);
     }
+
+    @Test
+    public void testCompareTo_SameObject_WrapAround()
+    {
+        Range<Token> range = r(10, -10);
+        assertEquals(0, range.compareTo(range));
+    }
+
+    @Test
+    public void testCompareTo_BothWrapAround()
+    {
+        Range<Token> r0 = r(10, -10);
+        Range<Token> r1 = r(20, -5);
+        assertNotSame(r0.compareTo(r1), r1.compareTo(r0));
+    }
 }


[2/6] cassandra git commit: Range.compareTo() violates the contract of Comparable

Posted by ja...@apache.org.
Range.compareTo() violates the contract of Comparable

patch by jasobrown and blambov for CASSANDRA-11216


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ecbeb084
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ecbeb084
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ecbeb084

Branch: refs/heads/cassandra-3.0
Commit: ecbeb0841e8627fa74a34346e0c380061588366a
Parents: 941d13d
Author: Jason Brown <ja...@gmail.com>
Authored: Fri Feb 26 11:53:03 2016 -0800
Committer: Jason Brown <ja...@gmail.com>
Committed: Fri Feb 26 14:47:57 2016 -0800

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 src/java/org/apache/cassandra/dht/Range.java    | 20 +++++++++++---------
 .../org/apache/cassandra/dht/RangeTest.java     | 15 +++++++++++++++
 3 files changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ecbeb084/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9162165..aa3adf5 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.2.6
+ * Range.compareTo() violates the contract of Comparable (CASSANDRA-11216)
  * Avoid NPE when serializing ErrorMessage with null message (CASSANDRA-11167)
  * Replacing an aggregate with a new version doesn't reset INITCOND (CASSANDRA-10840)
  * (cqlsh) cqlsh cannot be called through symlink (CASSANDRA-11037)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ecbeb084/src/java/org/apache/cassandra/dht/Range.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/Range.java b/src/java/org/apache/cassandra/dht/Range.java
index f2c5996..34e91ea 100644
--- a/src/java/org/apache/cassandra/dht/Range.java
+++ b/src/java/org/apache/cassandra/dht/Range.java
@@ -32,6 +32,8 @@ import org.apache.cassandra.utils.Pair;
  * A Range is responsible for the tokens between (left, right].
  *
  * Used by the partitioner and by map/reduce by-token range scans.
+ *
+ * Note: this class has a natural ordering that is inconsistent with equals
  */
 public class Range<T extends RingPosition<T>> extends AbstractBounds<T> implements Comparable<Range<T>>, Serializable
 {
@@ -254,18 +256,18 @@ public class Range<T extends RingPosition<T>> extends AbstractBounds<T> implemen
        return left.compareTo(right) >= 0;
     }
 
+    /**
+     * Note: this class has a natural ordering that is inconsistent with equals
+     */
     public int compareTo(Range<T> rhs)
     {
-        /*
-         * If the range represented by the "this" pointer
-         * is a wrap around then it is the smaller one.
-         */
-        if ( isWrapAround(left, right) )
-            return -1;
-
-        if ( isWrapAround(rhs.left, rhs.right) )
-            return 1;
+        boolean lhsWrap = isWrapAround(left, right);
+        boolean rhsWrap = isWrapAround(rhs.left, rhs.right);
 
+        // if one of the two wraps, that's the smaller one.
+        if (lhsWrap != rhsWrap)
+            return Boolean.compare(!lhsWrap, !rhsWrap);
+        // otherwise compare by right.
         return right.compareTo(rhs.right);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ecbeb084/test/unit/org/apache/cassandra/dht/RangeTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/dht/RangeTest.java b/test/unit/org/apache/cassandra/dht/RangeTest.java
index 4255487..9fb49cf 100644
--- a/test/unit/org/apache/cassandra/dht/RangeTest.java
+++ b/test/unit/org/apache/cassandra/dht/RangeTest.java
@@ -661,4 +661,19 @@ public class RangeTest
     {
         return new Murmur3Partitioner.LongToken(t);
     }
+
+    @Test
+    public void testCompareTo_SameObject_WrapAround()
+    {
+        Range<Token> range = r(10, -10);
+        assertEquals(0, range.compareTo(range));
+    }
+
+    @Test
+    public void testCompareTo_BothWrapAround()
+    {
+        Range<Token> r0 = r(10, -10);
+        Range<Token> r1 = r(20, -5);
+        assertNotSame(r0.compareTo(r1), r1.compareTo(r0));
+    }
 }


[3/6] cassandra git commit: Range.compareTo() violates the contract of Comparable

Posted by ja...@apache.org.
Range.compareTo() violates the contract of Comparable

patch by jasobrown and blambov for CASSANDRA-11216


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ecbeb084
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ecbeb084
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ecbeb084

Branch: refs/heads/trunk
Commit: ecbeb0841e8627fa74a34346e0c380061588366a
Parents: 941d13d
Author: Jason Brown <ja...@gmail.com>
Authored: Fri Feb 26 11:53:03 2016 -0800
Committer: Jason Brown <ja...@gmail.com>
Committed: Fri Feb 26 14:47:57 2016 -0800

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 src/java/org/apache/cassandra/dht/Range.java    | 20 +++++++++++---------
 .../org/apache/cassandra/dht/RangeTest.java     | 15 +++++++++++++++
 3 files changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ecbeb084/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9162165..aa3adf5 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.2.6
+ * Range.compareTo() violates the contract of Comparable (CASSANDRA-11216)
  * Avoid NPE when serializing ErrorMessage with null message (CASSANDRA-11167)
  * Replacing an aggregate with a new version doesn't reset INITCOND (CASSANDRA-10840)
  * (cqlsh) cqlsh cannot be called through symlink (CASSANDRA-11037)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ecbeb084/src/java/org/apache/cassandra/dht/Range.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/Range.java b/src/java/org/apache/cassandra/dht/Range.java
index f2c5996..34e91ea 100644
--- a/src/java/org/apache/cassandra/dht/Range.java
+++ b/src/java/org/apache/cassandra/dht/Range.java
@@ -32,6 +32,8 @@ import org.apache.cassandra.utils.Pair;
  * A Range is responsible for the tokens between (left, right].
  *
  * Used by the partitioner and by map/reduce by-token range scans.
+ *
+ * Note: this class has a natural ordering that is inconsistent with equals
  */
 public class Range<T extends RingPosition<T>> extends AbstractBounds<T> implements Comparable<Range<T>>, Serializable
 {
@@ -254,18 +256,18 @@ public class Range<T extends RingPosition<T>> extends AbstractBounds<T> implemen
        return left.compareTo(right) >= 0;
     }
 
+    /**
+     * Note: this class has a natural ordering that is inconsistent with equals
+     */
     public int compareTo(Range<T> rhs)
     {
-        /*
-         * If the range represented by the "this" pointer
-         * is a wrap around then it is the smaller one.
-         */
-        if ( isWrapAround(left, right) )
-            return -1;
-
-        if ( isWrapAround(rhs.left, rhs.right) )
-            return 1;
+        boolean lhsWrap = isWrapAround(left, right);
+        boolean rhsWrap = isWrapAround(rhs.left, rhs.right);
 
+        // if one of the two wraps, that's the smaller one.
+        if (lhsWrap != rhsWrap)
+            return Boolean.compare(!lhsWrap, !rhsWrap);
+        // otherwise compare by right.
         return right.compareTo(rhs.right);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ecbeb084/test/unit/org/apache/cassandra/dht/RangeTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/dht/RangeTest.java b/test/unit/org/apache/cassandra/dht/RangeTest.java
index 4255487..9fb49cf 100644
--- a/test/unit/org/apache/cassandra/dht/RangeTest.java
+++ b/test/unit/org/apache/cassandra/dht/RangeTest.java
@@ -661,4 +661,19 @@ public class RangeTest
     {
         return new Murmur3Partitioner.LongToken(t);
     }
+
+    @Test
+    public void testCompareTo_SameObject_WrapAround()
+    {
+        Range<Token> range = r(10, -10);
+        assertEquals(0, range.compareTo(range));
+    }
+
+    @Test
+    public void testCompareTo_BothWrapAround()
+    {
+        Range<Token> r0 = r(10, -10);
+        Range<Token> r1 = r(20, -5);
+        assertNotSame(r0.compareTo(r1), r1.compareTo(r0));
+    }
 }


[4/6] cassandra git commit: Merge branch 'cassandra-2.2' into cassandra-3.0

Posted by ja...@apache.org.
Merge branch 'cassandra-2.2' into cassandra-3.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/d7cb6f61
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/d7cb6f61
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/d7cb6f61

Branch: refs/heads/trunk
Commit: d7cb6f61adec951c082cdeea64ffe5f68b8f7651
Parents: 9961b69 ecbeb08
Author: Jason Brown <ja...@gmail.com>
Authored: Fri Feb 26 14:49:35 2016 -0800
Committer: Jason Brown <ja...@gmail.com>
Committed: Fri Feb 26 14:50:13 2016 -0800

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 src/java/org/apache/cassandra/dht/Range.java    | 20 +++++++++++---------
 .../org/apache/cassandra/dht/RangeTest.java     | 15 +++++++++++++++
 3 files changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/d7cb6f61/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index fbc1c8a,aa3adf5..2dacd3a
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,24 -1,5 +1,25 @@@
 -2.2.6
 +3.0.4
 + * MV should only query complex columns included in the view (CASSANDRA-11069)
 + * Failed aggregate creation breaks server permanently (CASSANDRA-11064)
 + * Add sstabledump tool (CASSANDRA-7464)
 + * Introduce backpressure for hints (CASSANDRA-10972)
 + * Fix ClusteringPrefix not being able to read tombstone range boundaries (CASSANDRA-11158)
 + * Prevent logging in sandboxed state (CASSANDRA-11033)
 + * Disallow drop/alter operations of UDTs used by UDAs (CASSANDRA-10721)
 + * Add query time validation method on Index (CASSANDRA-11043)
 + * Avoid potential AssertionError in mixed version cluster (CASSANDRA-11128)
 + * Properly handle hinted handoff after topology changes (CASSANDRA-5902)
 + * AssertionError when listing sstable files on inconsistent disk state (CASSANDRA-11156)
 + * Fix wrong rack counting and invalid conditions check for TokenAllocation
 +   (CASSANDRA-11139)
 + * Avoid creating empty hint files (CASSANDRA-11090)
 + * Fix leak detection strong reference loop using weak reference (CASSANDRA-11120)
 + * Configurie BatchlogManager to stop delayed tasks on shutdown (CASSANDRA-11062)
 + * Hadoop integration is incompatible with Cassandra Driver 3.0.0 (CASSANDRA-11001)
 + * Add dropped_columns to the list of schema table so it gets handled
 +   properly (CASSANDRA-11050)
 +Merged from 2.2:
+  * Range.compareTo() violates the contract of Comparable (CASSANDRA-11216)
   * Avoid NPE when serializing ErrorMessage with null message (CASSANDRA-11167)
   * Replacing an aggregate with a new version doesn't reset INITCOND (CASSANDRA-10840)
   * (cqlsh) cqlsh cannot be called through symlink (CASSANDRA-11037)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d7cb6f61/src/java/org/apache/cassandra/dht/Range.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d7cb6f61/test/unit/org/apache/cassandra/dht/RangeTest.java
----------------------------------------------------------------------


[6/6] cassandra git commit: Merge branch 'cassandra-3.0' into trunk

Posted by ja...@apache.org.
Merge branch 'cassandra-3.0' into trunk


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/11d7eb3b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/11d7eb3b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/11d7eb3b

Branch: refs/heads/trunk
Commit: 11d7eb3ba32e2abe01a14017477846ab884b09f6
Parents: e1a14f5 d7cb6f6
Author: Jason Brown <ja...@gmail.com>
Authored: Fri Feb 26 14:50:32 2016 -0800
Committer: Jason Brown <ja...@gmail.com>
Committed: Fri Feb 26 14:51:33 2016 -0800

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 src/java/org/apache/cassandra/dht/Range.java    | 20 +++++++++++---------
 .../org/apache/cassandra/dht/RangeTest.java     | 15 +++++++++++++++
 3 files changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/11d7eb3b/CHANGES.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/11d7eb3b/src/java/org/apache/cassandra/dht/Range.java
----------------------------------------------------------------------


[5/6] cassandra git commit: Merge branch 'cassandra-2.2' into cassandra-3.0

Posted by ja...@apache.org.
Merge branch 'cassandra-2.2' into cassandra-3.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/d7cb6f61
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/d7cb6f61
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/d7cb6f61

Branch: refs/heads/cassandra-3.0
Commit: d7cb6f61adec951c082cdeea64ffe5f68b8f7651
Parents: 9961b69 ecbeb08
Author: Jason Brown <ja...@gmail.com>
Authored: Fri Feb 26 14:49:35 2016 -0800
Committer: Jason Brown <ja...@gmail.com>
Committed: Fri Feb 26 14:50:13 2016 -0800

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 src/java/org/apache/cassandra/dht/Range.java    | 20 +++++++++++---------
 .../org/apache/cassandra/dht/RangeTest.java     | 15 +++++++++++++++
 3 files changed, 27 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/d7cb6f61/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index fbc1c8a,aa3adf5..2dacd3a
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,24 -1,5 +1,25 @@@
 -2.2.6
 +3.0.4
 + * MV should only query complex columns included in the view (CASSANDRA-11069)
 + * Failed aggregate creation breaks server permanently (CASSANDRA-11064)
 + * Add sstabledump tool (CASSANDRA-7464)
 + * Introduce backpressure for hints (CASSANDRA-10972)
 + * Fix ClusteringPrefix not being able to read tombstone range boundaries (CASSANDRA-11158)
 + * Prevent logging in sandboxed state (CASSANDRA-11033)
 + * Disallow drop/alter operations of UDTs used by UDAs (CASSANDRA-10721)
 + * Add query time validation method on Index (CASSANDRA-11043)
 + * Avoid potential AssertionError in mixed version cluster (CASSANDRA-11128)
 + * Properly handle hinted handoff after topology changes (CASSANDRA-5902)
 + * AssertionError when listing sstable files on inconsistent disk state (CASSANDRA-11156)
 + * Fix wrong rack counting and invalid conditions check for TokenAllocation
 +   (CASSANDRA-11139)
 + * Avoid creating empty hint files (CASSANDRA-11090)
 + * Fix leak detection strong reference loop using weak reference (CASSANDRA-11120)
 + * Configurie BatchlogManager to stop delayed tasks on shutdown (CASSANDRA-11062)
 + * Hadoop integration is incompatible with Cassandra Driver 3.0.0 (CASSANDRA-11001)
 + * Add dropped_columns to the list of schema table so it gets handled
 +   properly (CASSANDRA-11050)
 +Merged from 2.2:
+  * Range.compareTo() violates the contract of Comparable (CASSANDRA-11216)
   * Avoid NPE when serializing ErrorMessage with null message (CASSANDRA-11167)
   * Replacing an aggregate with a new version doesn't reset INITCOND (CASSANDRA-10840)
   * (cqlsh) cqlsh cannot be called through symlink (CASSANDRA-11037)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d7cb6f61/src/java/org/apache/cassandra/dht/Range.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d7cb6f61/test/unit/org/apache/cassandra/dht/RangeTest.java
----------------------------------------------------------------------