Updated Branches:
  refs/heads/trunk ebd60fb74 -> 0ea28c858

fix for M3P.midPoint
patch by slebresne; reviewed by jbellis for CASSANDRA-4621


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

Branch: refs/heads/trunk
Commit: 0ea28c858e3f693dc44d38cd4306e02049d01ce8
Parents: ebd60fb
Author: Jonathan Ellis <jbel...@apache.org>
Authored: Tue Sep 18 09:42:00 2012 -0500
Committer: Jonathan Ellis <jbel...@apache.org>
Committed: Tue Sep 18 09:42:00 2012 -0500

----------------------------------------------------------------------
 .../apache/cassandra/dht/Murmur3Partitioner.java   |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/0ea28c85/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java 
b/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java
index 440b159..3e98e32 100644
--- a/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java
+++ b/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java
@@ -63,7 +63,13 @@ public class Murmur3Partitioner extends 
AbstractPartitioner<LongToken>
         else // wrapping case
         {
             BigInteger max = BigInteger.valueOf(MAXIMUM);
-            midpoint = max.add(r).subtract(l).shiftRight(1).add(l).mod(max);
+            BigInteger min = BigInteger.valueOf(MINIMUM.token);
+            // length of range we're bisecting is (R - min) + (max - L)
+            // so we add that to L giving
+            // L + ((R - min) + (max - L) / 2) = (L + R + max - min) / 2
+            midpoint = (max.subtract(min).add(l).add(r)).shiftRight(1);
+            if (midpoint.compareTo(max) > 0)
+                midpoint = min.add(midpoint.subtract(max));
         }
 
         return new LongToken(midpoint.longValue());

Reply via email to