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 2010/11/16 16:15:17 UTC
svn commit: r1035656 - in /cassandra/branches/cassandra-0.6: ./
src/java/org/apache/cassandra/dht/ src/java/org/apache/cassandra/service/
test/unit/org/apache/cassandra/service/
Author: jbellis
Date: Tue Nov 16 15:15:17 2010
New Revision: 1035656
URL: http://svn.apache.org/viewvc?rev=1035656&view=rev
Log:
backport CASSANDRA-1700
Modified:
cassandra/branches/cassandra-0.6/CHANGES.txt
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/AbstractBounds.java
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/Range.java
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java
cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageProxyTest.java
Modified: cassandra/branches/cassandra-0.6/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=1035656&r1=1035655&r2=1035656&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.6/CHANGES.txt Tue Nov 16 15:15:17 2010
@@ -2,6 +2,7 @@
* add clustertool, config-converter, sstablekeys, and schematool
Windows .bat files (CASSANDRA-1723)
* reject range queries received during bootstrap (CASSANDRA-1739)
+ * fix wrapping-range queries on non-minimum token (CASSANDRA-1700)
0.6.8
Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/AbstractBounds.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/AbstractBounds.java?rev=1035656&r1=1035655&r2=1035656&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/AbstractBounds.java (original)
+++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/AbstractBounds.java Tue Nov 16 15:15:17 2010
@@ -61,13 +61,15 @@ public abstract class AbstractBounds imp
* Given token T and AbstractBounds ?L,R], returns Pair(?L,T], ?T,R])
* (where ? means that the same type of Bounds is returned -- Range or Bounds -- as the original.)
* The original AbstractBounds must contain the token T.
- * If R==T, null is returned as the right element of the Pair.
+ * If the split would cause one of the left or right side to be empty, it will be null in the result pair.
*/
public Pair<AbstractBounds,AbstractBounds> split(Token token)
{
assert contains(token);
- Range remainder = token.equals(right) ? null : new Range(token, right);
- return new Pair<AbstractBounds,AbstractBounds>(createFrom(token), remainder);
+ AbstractBounds lb = createFrom(token);
+ // we contain this token, so only one of the left or right can be empty
+ AbstractBounds rb = lb != null && token.equals(right) ? null : new Range(token, right);
+ return new Pair<AbstractBounds,AbstractBounds>(lb, rb);
}
@Override
@@ -81,7 +83,7 @@ public abstract class AbstractBounds imp
public abstract boolean contains(Token start);
- /** @return A clone of this AbstractBounds with a new right Token. */
+ /** @return A clone of this AbstractBounds with a new right Token, or null if an identical range would be created. */
public abstract AbstractBounds createFrom(Token right);
private static class AbstractBoundsSerializer implements ICompactSerializer2<AbstractBounds>
Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/Range.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/Range.java?rev=1035656&r1=1035655&r2=1035656&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/Range.java (original)
+++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/Range.java Tue Nov 16 15:15:17 2010
@@ -189,6 +189,8 @@ public class Range extends AbstractBound
public AbstractBounds createFrom(Token token)
{
+ if (token.equals(left))
+ return null;
return new Range(left, token);
}
Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java?rev=1035656&r1=1035655&r2=1035656&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java (original)
+++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java Tue Nov 16 15:15:17 2010
@@ -623,7 +623,8 @@ public class StorageProxy implements Sto
// no more splits
break;
Pair<AbstractBounds,AbstractBounds> splits = remainder.split(token);
- ranges.add(splits.left);
+ if (splits.left != null)
+ ranges.add(splits.left);
remainder = splits.right;
}
if (remainder != null)
Modified: cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageProxyTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageProxyTest.java?rev=1035656&r1=1035655&r2=1035656&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageProxyTest.java (original)
+++ cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageProxyTest.java Tue Nov 16 15:15:17 2010
@@ -95,6 +95,8 @@ public class StorageProxyTest extends Cl
// full wraps
testGRR(range("0", "0"), range("0", "1"), range("1", "6"), range("6", ""), range("", "0"));
testGRR(range("", ""), range("", "1"), range("1", "6"), range("6", ""));
+ // wrap on member token
+ testGRR(range("6", "6"), range("6", ""), range("", "1"), range("1", "6"));
// end wrapped
testGRR(range("5", ""), range("5", "6"), range("6", ""));
}