Author: jbellis
Date: Fri Dec 11 03:58:46 2009
New Revision: 889497
URL: http://svn.apache.org/viewvc?rev=889497&view=rev
Log:
replace IPartitioner.getDecoratedKeyComparator with DK.compareTo, fixing NPE
that was fixed in the latter but not the former. patch by jbellis; reviewed by
Stu Hood and tested by Dan Di Spaltro
Modified:
incubator/cassandra/branches/cassandra-0.5/CHANGES.txt
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/BinaryMemtable.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/DecoratedKey.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/Memtable.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/IPartitioner.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/RandomPartitioner.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/IteratingRow.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTable.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableReader.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableWriter.java
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java
Modified: incubator/cassandra/branches/cassandra-0.5/CHANGES.txt
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/CHANGES.txt?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.5/CHANGES.txt (original)
+++ incubator/cassandra/branches/cassandra-0.5/CHANGES.txt Fri Dec 11 03:58:46
2009
@@ -1,4 +1,8 @@
-0.5.0 dev
+0.5.0 RC1
+ * Fix potential NPE in get_range_slice (CASSANDRA-623)
+
+
+0.5.0 beta 2
* Bootstrap improvements (several tickets)
* add nodeprobe repair anti-entropy feature (CASSANDRA-193, CASSANDRA-520)
* fix possibility of partition when many nodes restart at once
@@ -20,6 +24,7 @@
incorrectly (and temporarily) marked as down (CASSANDRA-610)
* respect memtable thresholds during log replay (CASSANDRA-609)
* support ConsistencyLevel.ALL on read (CASSANDRA-584)
+ * add nodeprobe removetoken command (CASSANDRA-564)
0.5.0 beta
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/BinaryMemtable.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/BinaryMemtable.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/BinaryMemtable.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/BinaryMemtable.java
Fri Dec 11 03:58:46 2009
@@ -132,7 +132,7 @@
assert !columnFamilies_.isEmpty();
logger_.info("Sorting " + this);
List<DecoratedKey> keys = new
ArrayList<DecoratedKey>(columnFamilies_.keySet());
- Collections.sort(keys, partitioner_.getDecoratedKeyComparator());
+ Collections.sort(keys);
return keys;
}
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
Fri Dec 11 03:58:46 2009
@@ -1264,8 +1264,6 @@
{
final DecoratedKey startWithDK = partitioner.decorateKey(startWith);
final DecoratedKey stopAtDK = partitioner.decorateKey(stopAt);
- // (OPP key decoration is a no-op so using the "decorated" comparator
against raw keys is fine)
- final Comparator<DecoratedKey> comparator =
partitioner.getDecoratedKeyComparator();
// create a CollatedIterator that will return unique keys from
different sources
// (current memtable, historical memtables, and SSTables) in the
correct order.
@@ -1277,8 +1275,8 @@
{
public boolean apply(DecoratedKey key)
{
- return comparator.compare(startWithDK, key) <= 0
- && (stopAt.isEmpty() || comparator.compare(key,
stopAtDK) <= 0);
+ return startWithDK.compareTo(key) <= 0
+ && (stopAt.isEmpty() || key.compareTo(stopAtDK) <= 0);
}
};
@@ -1318,7 +1316,7 @@
iterators.add(iter);
}
- Iterator<DecoratedKey> collated =
IteratorUtils.collatedIterator(comparator, iterators);
+ Iterator<DecoratedKey> collated =
IteratorUtils.collatedIterator(DecoratedKey.comparator, iterators);
Iterable<DecoratedKey> reduced = new ReducingIterator<DecoratedKey,
DecoratedKey>(collated) {
DecoratedKey current;
@@ -1341,7 +1339,7 @@
boolean rangeCompletedLocally = false;
for (DecoratedKey current : reduced)
{
- if (!stopAt.isEmpty() && comparator.compare(stopAtDK, current)
< 0)
+ if (!stopAt.isEmpty() && stopAtDK.compareTo(current) < 0)
{
rangeCompletedLocally = true;
break;
@@ -1386,9 +1384,6 @@
public RangeReply getKeyRangeRaw(final DecoratedKey startWith, final
DecoratedKey stopAt, int maxResults)
throws IOException, ExecutionException, InterruptedException
{
- // (OPP key decoration is a no-op so using the "decorated" comparator
against raw keys is fine)
- final Comparator<DecoratedKey> comparator =
partitioner.getDecoratedKeyComparator();
-
// create a CollatedIterator that will return unique keys from
different sources
// (current memtable, historical memtables, and SSTables) in the
correct order.
List<Iterator<DecoratedKey>> iterators = new
ArrayList<Iterator<DecoratedKey>>();
@@ -1399,8 +1394,8 @@
{
public boolean apply(DecoratedKey key)
{
- return comparator.compare(startWith, key) <= 0
- && (stopAt.isEmpty() || comparator.compare(key,
stopAt) <= 0);
+ return startWith.compareTo(key) <= 0
+ && (stopAt.isEmpty() || key.compareTo(stopAt) <= 0);
}
};
@@ -1440,7 +1435,7 @@
iterators.add(iter);
}
- Iterator<DecoratedKey> collated =
IteratorUtils.collatedIterator(comparator, iterators);
+ Iterator<DecoratedKey> collated =
IteratorUtils.collatedIterator(DecoratedKey.comparator, iterators);
Iterable<DecoratedKey> reduced = new ReducingIterator<DecoratedKey,
DecoratedKey>(collated) {
DecoratedKey current;
@@ -1462,7 +1457,7 @@
boolean rangeCompletedLocally = false;
for (DecoratedKey current : reduced)
{
- if (!stopAt.isEmpty() && comparator.compare( stopAt, current)
< 0)
+ if (!stopAt.isEmpty() && stopAt.compareTo(current) < 0)
{
rangeCompletedLocally = true;
break;
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/DecoratedKey.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/DecoratedKey.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/DecoratedKey.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/DecoratedKey.java
Fri Dec 11 03:58:46 2009
@@ -21,6 +21,7 @@
import java.io.DataOutput;
import java.io.IOException;
import java.io.DataInput;
+import java.util.Comparator;
import org.apache.cassandra.dht.Token;
import org.apache.cassandra.io.ICompactSerializer2;
@@ -44,6 +45,14 @@
return serializer;
}
+ public static final Comparator<DecoratedKey> comparator = new
Comparator<DecoratedKey>()
+ {
+ public int compare(DecoratedKey o1, DecoratedKey o2)
+ {
+ return o1.compareTo(o2);
+ }
+ };
+
public final T token;
public final String key;
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/Memtable.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/Memtable.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/Memtable.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/db/Memtable.java
Fri Dec 11 03:58:46 2009
@@ -182,9 +182,8 @@
{
logger_.info("Sorting " + this);
// sort keys in the order they would be in when decorated
- Comparator<DecoratedKey> dc = partitioner_.getDecoratedKeyComparator();
ArrayList<DecoratedKey> orderedKeys = new
ArrayList<DecoratedKey>(columnFamilies_.keySet());
- Collections.sort(orderedKeys, dc);
+ Collections.sort(orderedKeys);
return orderedKeys;
}
@@ -225,7 +224,7 @@
// cannot create a PQ of size zero (wtf?)
return Arrays.asList(new DecoratedKey[0]).iterator();
}
- PriorityQueue<DecoratedKey> pq = new
PriorityQueue<DecoratedKey>(columnFamilies_.size(),
partitioner_.getDecoratedKeyComparator());
+ PriorityQueue<DecoratedKey> pq = new
PriorityQueue<DecoratedKey>(columnFamilies_.size());
pq.addAll(columnFamilies_.keySet());
return new DestructivePQIterator<DecoratedKey>(pq);
}
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java
Fri Dec 11 03:58:46 2009
@@ -37,16 +37,6 @@
public static final BigInteger BYTE_MASK = new BigInteger("255");
- /**
- * Comparators for decorated keys.
- */
- private static final Comparator<DecoratedKey<BytesToken>> comparator = new
Comparator<DecoratedKey<BytesToken>>() {
- public int compare(DecoratedKey<BytesToken> o1,
DecoratedKey<BytesToken> o2)
- {
- return FBUtilities.compareByteArrays(o1.token.token,
o2.token.token);
- }
- };
-
public DecoratedKey<BytesToken> decorateKey(String key)
{
return new DecoratedKey<BytesToken>(getToken(key), key);
@@ -62,11 +52,6 @@
return key.key;
}
- public Comparator<DecoratedKey<BytesToken>> getDecoratedKeyComparator()
- {
- return comparator;
- }
-
public BytesToken midpoint(BytesToken ltoken, BytesToken rtoken)
{
int sigbytes = Math.max(ltoken.token.length, rtoken.token.length);
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/IPartitioner.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/IPartitioner.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/IPartitioner.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/IPartitioner.java
Fri Dec 11 03:58:46 2009
@@ -49,11 +49,6 @@
public DecoratedKey<T> decorateKey(String key);
/**
- * @return a comparator for decorated key objects, not strings
- */
- public Comparator<DecoratedKey<T>> getDecoratedKeyComparator();
-
- /**
* Calculate a Token representing the approximate "middle" of the given
* range.
*
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
Fri Dec 11 03:58:46 2009
@@ -35,17 +35,6 @@
public static final BigInteger CHAR_MASK = new BigInteger("65535");
- /**
- * Comparators for decorated keys.
- */
- private static final Comparator<DecoratedKey<StringToken>> comparator =
- new Comparator<DecoratedKey<StringToken>>() {
- public int compare(DecoratedKey<StringToken> o1,
DecoratedKey<StringToken> o2)
- {
- return o1.key.compareTo(o2.key);
- }
- };
-
public DecoratedKey<StringToken> decorateKey(String key)
{
return new DecoratedKey<StringToken>(new StringToken(key), key);
@@ -61,11 +50,6 @@
return key.key;
}
- public Comparator<DecoratedKey<StringToken>> getDecoratedKeyComparator()
- {
- return comparator;
- }
-
public StringToken midpoint(StringToken ltoken, StringToken rtoken)
{
int sigchars = Math.max(ltoken.token.length(), rtoken.token.length());
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/RandomPartitioner.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/RandomPartitioner.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/RandomPartitioner.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/dht/RandomPartitioner.java
Fri Dec 11 03:58:46 2009
@@ -38,21 +38,6 @@
public static final BigIntegerToken MINIMUM = new BigIntegerToken("0");
private static final String DELIMITER = ":";
-
- private static final Comparator<DecoratedKey<BigIntegerToken>> comparator =
- new Comparator<DecoratedKey<BigIntegerToken>>() {
- public int compare(DecoratedKey<BigIntegerToken> o1,
DecoratedKey<BigIntegerToken> o2)
- {
- // first, compare on the bigint hash "decoration". usually this
will be enough.
- int v = o1.token.compareTo(o2.token);
- if (v != 0) {
- return v;
- }
-
- // if the hashes are equal, compare the strings
- return o1.key.compareTo(o2.key);
- }
- };
public DecoratedKey<BigIntegerToken> decorateKey(String key)
{
@@ -73,11 +58,6 @@
return key.token + DELIMITER + key.key;
}
- public Comparator<DecoratedKey<BigIntegerToken>>
getDecoratedKeyComparator()
- {
- return comparator;
- }
-
public BigIntegerToken midpoint(BigIntegerToken ltoken, BigIntegerToken
rtoken)
{
Pair<BigInteger,Boolean> midpair = FBUtilities.midpoint(ltoken.token,
rtoken.token, 127);
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/IteratingRow.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/IteratingRow.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/IteratingRow.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/IteratingRow.java
Fri Dec 11 03:58:46 2009
@@ -109,6 +109,6 @@
public int compareTo(IteratingRow o)
{
- return partitioner.getDecoratedKeyComparator().compare(key, o.key);
+ return key.compareTo(o.key);
}
}
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTable.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTable.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTable.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTable.java
Fri Dec 11 03:58:46 2009
@@ -179,7 +179,7 @@
public int compareTo(KeyPosition kp)
{
- return partitioner.getDecoratedKeyComparator().compare(key,
kp.key);
+ return key.compareTo(kp.key);
}
public String toString()
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableReader.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableReader.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableReader.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableReader.java
Fri Dec 11 03:58:46 2009
@@ -310,7 +310,7 @@
return -1;
}
long position = input.readLong();
- int v =
partitioner.getDecoratedKeyComparator().compare(indexDecoratedKey,
decoratedKey);
+ int v = indexDecoratedKey.compareTo(decoratedKey);
if (v == 0)
{
if (keyCache != null)
@@ -352,7 +352,7 @@
return -1;
}
long position = input.readLong();
- int v =
partitioner.getDecoratedKeyComparator().compare(indexDecoratedKey,
decoratedKey);
+ int v = indexDecoratedKey.compareTo(decoratedKey);
if (v >= 0)
return position;
}
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableWriter.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableWriter.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableWriter.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/io/SSTableWriter.java
Fri Dec 11 03:58:46 2009
@@ -61,8 +61,7 @@
{
throw new IOException("Keys must not be null.");
}
- Comparator<DecoratedKey> c = partitioner.getDecoratedKeyComparator();
- if (lastWrittenKey != null && c.compare(lastWrittenKey, decoratedKey)
> 0)
+ if (lastWrittenKey != null && lastWrittenKey.compareTo(decoratedKey) >
0)
{
logger.info("Last written key : " + lastWrittenKey);
logger.info("Current key : " + decoratedKey);
Modified:
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java?rev=889497&r1=889496&r2=889497&view=diff
==============================================================================
---
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java
(original)
+++
incubator/cassandra/branches/cassandra-0.5/src/java/org/apache/cassandra/service/StorageProxy.java
Fri Dec 11 03:58:46 2009
@@ -78,7 +78,7 @@
public int compare(String o1, String o2)
{
IPartitioner p = StorageService.getPartitioner();
- return p.getDecoratedKeyComparator().compare(p.decorateKey(o1),
p.decorateKey(o2));
+ return p.decorateKey(o1).compareTo(p.decorateKey(o2));
}
};