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