Author: jbellis
Date: Mon Dec 20 04:24:53 2010
New Revision: 1050980
URL: http://svn.apache.org/viewvc?rev=1050980&view=rev
Log:
SSTableExport validates key order
patch by Karl Mueller; reviewed by mdennis for CASSANDRA-1884
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1050980&r1=1050979&r2=1050980&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Mon Dec 20 04:24:53 2010
@@ -17,6 +17,7 @@ dev
* return InvalidRequest when remove of subcolumn without supercolumn
is requested (CASSANDRA-1866)
* flush before repair (CASSANDRA-1748)
+ * SSTableExport validates key order (CASSANDRA-1884)
0.7.0-rc2
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java?rev=1050980&r1=1050979&r2=1050980&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/tools/SSTableExport.java
Mon Dec 20 04:24:53 2010
@@ -157,9 +157,16 @@ public class SSTableExport
{
Descriptor desc = Descriptor.fromFilename(ssTableFile);
KeyIterator iter = new KeyIterator(desc);
+ DecoratedKey lastKey = null;
while (iter.hasNext())
{
DecoratedKey key = iter.next();
+
+ // validate order of the keys in the sstable
+ if (lastKey != null && lastKey.compareTo(key) > 0 )
+ throw new IOException("Key out of order! " + lastKey + " > " +
key);
+ lastKey = key;
+
outs.println(bytesToHex(key.key));
}
iter.close();
@@ -187,12 +194,21 @@ public class SSTableExport
excludeSet = new HashSet<String>(Arrays.asList(excludes));
outs.println("{");
+
+ // last key to compare order
+ DecoratedKey lastKey = null;
for (String key : keys)
{
if (excludeSet.contains(key))
continue;
DecoratedKey<?> dk =
partitioner.decorateKey(ByteBuffer.wrap(hexToBytes(key)));
+
+ // validate order of the keys in the sstable
+ if (lastKey != null && lastKey.compareTo(dk) > 0 )
+ throw new IOException("Key out of order! " + lastKey + " > " +
dk);
+ lastKey = dk;
+
scanner.seekTo(dk);
i++;