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
This commit is contained in:
Jonathan Ellis 2009-06-17 16:08:39 +00:00
parent a102a3e73a
commit c1545f5214
2 changed files with 9 additions and 2 deletions

View File

@ -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<Range>, Serializable
{
return serializer_;
}
private final Token left_;
private final Token right_;
@ -101,7 +104,7 @@ public class Range implements Comparable<Range>, 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
{

View File

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