From c1545f5214644b47efeac2001e3d3542efa9193b Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Wed, 17 Jun 2009 16:08:39 +0000 Subject: [PATCH] fix off-by-one error in Range.contains(Token): the endpoint (right) of the range is always supposed to be exclusive, but it was inclusive in the non-wrapping case. patch by Stu Hood; reviewed by jbellis for CASSANDRA-236 git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@785697 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/cassandra/dht/Range.java | 7 +++++-- test/unit/org/apache/cassandra/dht/RangeTest.java | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/cassandra/dht/Range.java b/src/java/org/apache/cassandra/dht/Range.java index 67b99354d5..9eb3dfcd20 100644 --- a/src/java/org/apache/cassandra/dht/Range.java +++ b/src/java/org/apache/cassandra/dht/Range.java @@ -31,6 +31,9 @@ import org.apache.cassandra.service.StorageService; /** * A representation of the range that a node is responsible for on the DHT ring. + * + * A Range is responsible for the tokens between [left, right). + * * Author : Avinash Lakshman ( alakshman@facebook.com) & Prashant Malik ( pmalik@facebook.com ) */ @@ -46,7 +49,7 @@ public class Range implements Comparable, Serializable { return serializer_; } - + private final Token left_; private final Token right_; @@ -101,7 +104,7 @@ public class Range implements Comparable, Serializable /* * This is the range [a, b) where a < b. */ - return ( bi.compareTo(left_) >= 0 && right_.compareTo(bi) >=0 ); + return ( bi.compareTo(left_) >= 0 && right_.compareTo(bi) > 0 ); } else { diff --git a/test/unit/org/apache/cassandra/dht/RangeTest.java b/test/unit/org/apache/cassandra/dht/RangeTest.java index 22ec8e391e..a617972246 100644 --- a/test/unit/org/apache/cassandra/dht/RangeTest.java +++ b/test/unit/org/apache/cassandra/dht/RangeTest.java @@ -24,13 +24,17 @@ public class RangeTest { @Test public void testRange() { Range left = new Range(new BigIntegerToken("0"), new BigIntegerToken("100")); + assert left.contains(new BigIntegerToken("0")); assert left.contains(new BigIntegerToken("10")); assert !left.contains(new BigIntegerToken("-1")); + assert !left.contains(new BigIntegerToken("100")); assert !left.contains(new BigIntegerToken("101")); Range right = new Range(new BigIntegerToken("100"), new BigIntegerToken("0")); + assert right.contains(new BigIntegerToken("100")); assert right.contains(new BigIntegerToken("200")); assert right.contains(new BigIntegerToken("-10")); + assert !right.contains(new BigIntegerToken("0")); assert !right.contains(new BigIntegerToken("1")); } }