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 2012/09/18 16:42:34 UTC
git commit: fix for M3P.midPoint patch by slebresne;
reviewed by jbellis for CASSANDRA-4621
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 <jb...@apache.org>
Authored: Tue Sep 18 09:42:00 2012 -0500
Committer: Jonathan Ellis <jb...@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());