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++;


Reply via email to