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