You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/11/18 23:56:43 UTC

svn commit: r1203893 - in /cassandra/branches/cassandra-1.0: CHANGES.txt src/java/org/apache/cassandra/dht/RandomPartitioner.java test/unit/org/apache/cassandra/utils/MerkleTreeTest.java

Author: jbellis
Date: Fri Nov 18 22:56:43 2011
New Revision: 1203893

URL: http://svn.apache.org/viewvc?rev=1203893&view=rev
Log:
enforce RP tokens 0..2**127
patch by jbellis; reviewed by Nick Bailey for CASSANDRA-3501

Modified:
    cassandra/branches/cassandra-1.0/CHANGES.txt
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/dht/RandomPartitioner.java
    cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java

Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1203893&r1=1203892&r2=1203893&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Fri Nov 18 22:56:43 2011
@@ -1,4 +1,5 @@
 1.0.4
+ * enforce RP tokens 0..2**127 (CASSANDRA-3501)
  * canonicalize paths exposed through JMX (CASSANDRA-3504)
  * fix "liveSize" stat when sstables are removed (CASSANDRA-3496)
  * add bloom filter FP rates to nodetool cfstats (CASSANDRA-3347)

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/dht/RandomPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/dht/RandomPartitioner.java?rev=1203893&r1=1203892&r2=1203893&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/dht/RandomPartitioner.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/dht/RandomPartitioner.java Fri Nov 18 22:56:43 2011
@@ -38,6 +38,7 @@ public class RandomPartitioner implement
 {
     public static final BigInteger ZERO = new BigInteger("0");
     public static final BigIntegerToken MINIMUM = new BigIntegerToken("-1");
+    public static final BigInteger MAXIMUM = new BigInteger("2").pow(127);
 
     private static final byte DELIMITER_BYTE = ":".getBytes()[0];
 
@@ -118,7 +119,11 @@ public class RandomPartitioner implement
         {
             try
             {
-                new BigInteger(token);
+                BigInteger i = new BigInteger(token);
+                if (i.compareTo(ZERO) < 0)
+                    throw new ConfigurationException("Token must be >= 0");
+                if (i.compareTo(MAXIMUM) > 0)
+                    throw new ConfigurationException("Token must be <= 2**127");
             }
             catch (NumberFormatException e)
             {
@@ -163,7 +168,7 @@ public class RandomPartitioner implement
         // n-case
         else {
             // NOTE: All divisions must take place in BigDecimals, and all modulo operators must take place in BigIntegers.
-            final BigInteger ri = new BigInteger("2").pow(127);                             //  (used for addition later)
+            final BigInteger ri = MAXIMUM(127);                             //  (used for addition later)
             final BigDecimal r  = new BigDecimal(ri);                                       // The entire range, 2**127
             Token start = (Token)i.next(); BigInteger ti = ((BigIntegerToken)start).token;  // The first token and its value
             Token t; BigInteger tim1 = ti;                                                  // The last token and its value (after loop)

Modified: cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java?rev=1203893&r1=1203892&r2=1203893&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java (original)
+++ cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/utils/MerkleTreeTest.java Fri Nov 18 22:56:43 2011
@@ -102,8 +102,7 @@ public class MerkleTreeTest
     {
         if (i == -1)
             return new BigIntegerToken(new BigInteger("-1"));
-        BigInteger md5_max = new BigInteger("2").pow(127);
-        BigInteger bint = md5_max.divide(TOKEN_SCALE).multiply(new BigInteger(""+i));
+        BigInteger bint = RandomPartitioner.MAXIMUM.divide(TOKEN_SCALE).multiply(new BigInteger(""+i));
         return new BigIntegerToken(bint);
     }