Author: slebresne
Date: Thu Dec  8 12:07:13 2011
New Revision: 1211849

URL: http://svn.apache.org/viewvc?rev=1211849&view=rev
Log:
merge from 1.0

Added:
    cassandra/trunk/test/data/legacy-sstables/hb/
      - copied from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/
    cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/
      - copied from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/
    cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Data.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Data.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Digest.sha1
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Digest.sha1
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Filter.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Filter.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Index.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Index.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Statistics.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1-hb-1-Statistics.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Data.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Data.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Digest.sha1
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Digest.sha1
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Filter.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Filter.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Index.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Index.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Statistics.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Indexed1.626972746864617465-hb-1-Statistics.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Data.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Data.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Digest.sha1
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Digest.sha1
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Filter.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Filter.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Index.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Index.db
    
cassandra/trunk/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Statistics.db
      - copied unchanged from r1211848, 
cassandra/branches/cassandra-1.0/test/data/legacy-sstables/hb/Keyspace1/Standard1-hb-0-Statistics.db
Modified:
    cassandra/trunk/   (props changed)
    cassandra/trunk/CHANGES.txt
    cassandra/trunk/contrib/   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
   (props changed)
    
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
   (props changed)
    
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableMetadata.java
    cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
    cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
    
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataSerializerTest.java
    
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java

Propchange: cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec  8 12:07:13 2011
@@ -4,7 +4,7 @@
 
/cassandra/branches/cassandra-0.8:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1209609,1210902,1211000,1211486
 /cassandra/branches/cassandra-0.8.0:1125021-1130369
 /cassandra/branches/cassandra-0.8.1:1101014-1125018
-/cassandra/branches/cassandra-1.0:1167085-1211632
+/cassandra/branches/cassandra-1.0:1167085-1211632,1211848
 
/cassandra/branches/cassandra-1.0.0:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243
 /cassandra/tags/cassandra-0.7.0-rc3:1051699-1053689
 /cassandra/tags/cassandra-0.8.0-rc1:1102511-1125020

Modified: cassandra/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1211849&r1=1211848&r2=1211849&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Thu Dec  8 12:07:13 2011
@@ -42,6 +42,7 @@
    (CASSANDRA-3558)
  * fix missing response during range slice repair (CASSANDRA-3551)
  * 'describe ring' moved from CLI to nodetool and available through JMX 
(CASSANDRA-3220)
+ * add back partitioner to sstable metadata (CASSANDRA-3540)
 Merged from 0.8:
  * use cannonical host for local node in nodetool info (CASSANDRA-3556)
  * detect misuses of CounterColumnType (CASSANDRA-3422)

Propchange: cassandra/trunk/contrib/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec  8 12:07:13 2011
@@ -4,7 +4,7 @@
 
/cassandra/branches/cassandra-0.8/contrib:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1209609,1210902,1211000,1211486
 /cassandra/branches/cassandra-0.8.0/contrib:1125021-1130369
 /cassandra/branches/cassandra-0.8.1/contrib:1101014-1125018
-/cassandra/branches/cassandra-1.0/contrib:1167085-1211632
+/cassandra/branches/cassandra-1.0/contrib:1167085-1211632,1211848
 
/cassandra/branches/cassandra-1.0.0/contrib:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243
 /cassandra/tags/cassandra-0.7.0-rc3/contrib:1051699-1053689
 /cassandra/tags/cassandra-0.8.0-rc1/contrib:1102511-1125020

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec  8 12:07:13 2011
@@ -4,7 +4,7 @@
 
/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1209609,1210902,1211000,1211486
 
/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1125021-1130369
 
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1101014-1125018
-/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167085-1211632
+/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167085-1211632,1211848
 
/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1051699-1053689
 
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java:1102511-1125020

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec  8 12:07:13 2011
@@ -4,7 +4,7 @@
 
/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1209609,1210902,1211000,1211486
 
/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1125021-1130369
 
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1101014-1125018
-/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167085-1211632
+/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167085-1211632,1211848
 
/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1051699-1053689
 
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/Column.java:1102511-1125020

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec  8 12:07:13 2011
@@ -4,7 +4,7 @@
 
/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1209609,1210902,1211000,1211486
 
/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1125021-1130369
 
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1101014-1125018
-/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167085-1211632
+/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167085-1211632,1211848
 
/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1051699-1053689
 
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/InvalidRequestException.java:1102511-1125020

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec  8 12:07:13 2011
@@ -4,7 +4,7 @@
 
/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1209609,1210902,1211000,1211486
 
/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1125021-1130369
 
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1101014-1125018
-/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167085-1211632
+/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167085-1211632,1211848
 
/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1051699-1053689
 
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/NotFoundException.java:1102511-1125020

Propchange: 
cassandra/trunk/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec  8 12:07:13 2011
@@ -4,7 +4,7 @@
 
/cassandra/branches/cassandra-0.8/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1090934-1125013,1125019-1198724,1198726-1206097,1206099-1209609,1210902,1211000,1211486
 
/cassandra/branches/cassandra-0.8.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1125021-1130369
 
/cassandra/branches/cassandra-0.8.1/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1101014-1125018
-/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167085-1211632
+/cassandra/branches/cassandra-1.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167085-1211632,1211848
 
/cassandra/branches/cassandra-1.0.0/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1167104-1167229,1167232-1181093,1181741,1181816,1181820,1182951,1183243
 
/cassandra/tags/cassandra-0.7.0-rc3/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1051699-1053689
 
/cassandra/tags/cassandra-0.8.0-rc1/interface/thrift/gen-java/org/apache/cassandra/thrift/SuperColumn.java:1102511-1125020

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableMetadata.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableMetadata.java?rev=1211849&r1=1211848&r2=1211849&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableMetadata.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableMetadata.java 
Thu Dec  8 12:07:13 2011
@@ -29,7 +29,6 @@ import java.io.IOException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.commitlog.ReplayPosition;
 import org.apache.cassandra.io.util.FileUtils;
 import org.apache.cassandra.utils.EstimatedHistogram;
@@ -67,7 +66,7 @@ public class SSTableMetadata
              ReplayPosition.NONE,
              Long.MIN_VALUE,
              Double.MIN_VALUE,
-             
DatabaseDescriptor.getPartitioner().getClass().getCanonicalName());
+             null);
     }
 
     private SSTableMetadata(EstimatedHistogram rowSizes, EstimatedHistogram 
columnCounts, ReplayPosition replayPosition, long maxTimestamp, double cr, 
String partitioner)
@@ -134,14 +133,14 @@ public class SSTableMetadata
             maxTimestamp = Math.max(maxTimestamp, potentialMax);
         }
 
-        public SSTableMetadata finalizeMetadata()
+        public SSTableMetadata finalizeMetadata(String partitioner)
         {
             return new SSTableMetadata(estimatedRowSize,
                                        estimatedColumnCount,
                                        replayPosition,
                                        maxTimestamp,
                                        compressionRatio,
-                                       
DatabaseDescriptor.getPartitioner().getClass().getCanonicalName());
+                                       partitioner);
         }
 
         public Collector estimatedRowSize(EstimatedHistogram estimatedRowSize)
@@ -169,6 +168,8 @@ public class SSTableMetadata
 
         public void serialize(SSTableMetadata sstableStats, DataOutput dos) 
throws IOException
         {
+            assert sstableStats.partitioner != null;
+
             
EstimatedHistogram.serializer.serialize(sstableStats.estimatedRowSize, dos);
             
EstimatedHistogram.serializer.serialize(sstableStats.estimatedColumnCount, dos);
             ReplayPosition.serializer.serialize(sstableStats.replayPosition, 
dos);
@@ -209,9 +210,7 @@ public class SSTableMetadata
             double compressionRatio = desc.hasCompressionRatio
                                     ? dis.readDouble()
                                     : Double.MIN_VALUE;
-            String partitioner = desc.hasPartitioner
-                               ? dis.readUTF()
-                               : 
DatabaseDescriptor.getPartitioner().getClass().getCanonicalName();
+            String partitioner = desc.hasPartitioner ? dis.readUTF() : null;
             return new SSTableMetadata(rowSizes, columnCounts, replayPosition, 
maxTimestamp, compressionRatio, partitioner);
         }
     }

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java?rev=1211849&r1=1211848&r2=1211849&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
Thu Dec  8 12:07:13 2011
@@ -138,9 +138,11 @@ public class SSTableReader extends SSTab
                                         ? 
SSTableMetadata.serializer.deserialize(descriptor)
                                         : 
SSTableMetadata.createDefaultInstance();
 
-        // check if sstable is created using same partitioner as this node
+        // Check if sstable is created using same partitioner.
+        // Partitioner can be null, which indicates older version of sstable 
or no stats available.
+        // In that case, we skip the check.
         String partitionerName = partitioner.getClass().getCanonicalName();
-        if (!partitionerName.equals(sstableMetadata.partitioner))
+        if (sstableMetadata.partitioner != null && 
!partitionerName.equals(sstableMetadata.partitioner))
             throw new RuntimeException(String.format("Cannot open %s because 
partitioner does not match %s",
                                                      descriptor, 
partitionerName));
 

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java?rev=1211849&r1=1211848&r2=1211849&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java 
Thu Dec  8 12:07:13 2011
@@ -311,7 +311,7 @@ public class SSTableWriter extends SSTab
         dataFile.close();
 
         // write sstable statistics
-        SSTableMetadata sstableMetadata = 
sstableMetadataCollector.finalizeMetadata();
+        SSTableMetadata sstableMetadata = 
sstableMetadataCollector.finalizeMetadata(partitioner.getClass().getCanonicalName());
         writeMetadata(descriptor, sstableMetadata);
         maybeWriteDigest();
 

Modified: 
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataSerializerTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataSerializerTest.java?rev=1211849&r1=1211848&r2=1211849&view=diff
==============================================================================
--- 
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataSerializerTest.java
 (original)
+++ 
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableMetadataSerializerTest.java
 Thu Dec  8 12:07:13 2011
@@ -28,6 +28,7 @@ import java.io.IOException;
 import org.junit.Test;
 
 import org.apache.cassandra.db.commitlog.ReplayPosition;
+import org.apache.cassandra.dht.RandomPartitioner;
 import org.apache.cassandra.utils.EstimatedHistogram;
 
 public class SSTableMetadataSerializerTest
@@ -49,7 +50,7 @@ public class SSTableMetadataSerializerTe
                                                              
.estimatedColumnCount(columnCounts)
                                                              
.replayPosition(rp);
         collector.updateMaxTimestamp(maxTimestamp);
-        SSTableMetadata originalMetadata = collector.finalizeMetadata();
+        SSTableMetadata originalMetadata = 
collector.finalizeMetadata(RandomPartitioner.class.getCanonicalName());
 
         ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
         DataOutputStream dos = new DataOutputStream(byteOutput);
@@ -69,5 +70,6 @@ public class SSTableMetadataSerializerTe
         assert stats.replayPosition.equals(rp);
         assert stats.maxTimestamp == maxTimestamp;
         assert stats.maxTimestamp == originalMetadata.maxTimestamp;
+        assert 
RandomPartitioner.class.getCanonicalName().equals(stats.partitioner);
     }
 }

Modified: 
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java?rev=1211849&r1=1211848&r2=1211849&view=diff
==============================================================================
--- 
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
 (original)
+++ 
cassandra/trunk/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
 Thu Dec  8 12:07:13 2011
@@ -21,6 +21,7 @@ package org.apache.cassandra.io.sstable;
  */
 
 
+import java.io.File;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.concurrent.ExecutionException;
@@ -33,14 +34,21 @@ import org.junit.Test;
 import org.apache.cassandra.CleanupHelper;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.*;
+import org.apache.cassandra.db.columniterator.IdentityQueryFilter;
 import org.apache.cassandra.db.compaction.CompactionManager;
 import org.apache.cassandra.db.filter.QueryPath;
+import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.dht.Range;
 import org.apache.cassandra.dht.Token;
 import org.apache.cassandra.io.util.FileDataInput;
+import org.apache.cassandra.io.util.FileUtils;
 import org.apache.cassandra.io.util.MmappedSegmentedFile;
 import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.thrift.IndexClause;
+import org.apache.cassandra.thrift.IndexExpression;
+import org.apache.cassandra.thrift.IndexOperator;
 import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.CLibrary;
 import org.apache.cassandra.utils.Pair;
 
 import org.apache.cassandra.Util;
@@ -188,6 +196,75 @@ public class SSTableReaderTest extends C
         assert p.right == p7;
     }
 
+    @Test
+    public void testPersistentStatisticsWithSecondaryIndex() throws 
IOException, ExecutionException, InterruptedException
+    {
+        // Create secondary index and flush to disk
+        Table table = Table.open("Keyspace1");
+        ColumnFamilyStore store = table.getColumnFamilyStore("Indexed1");
+        ByteBuffer key = ByteBufferUtil.bytes(String.valueOf("k1"));
+        RowMutation rm = new RowMutation("Keyspace1", key);
+        rm.add(new QueryPath("Indexed1", null, 
ByteBufferUtil.bytes("birthdate")), ByteBufferUtil.bytes(1L), 
System.currentTimeMillis());
+        rm.apply();
+        store.forceBlockingFlush();
+
+        // check if opening and querying works
+        assertIndexQueryWorks(store);
+    }
+
+    @Test
+    public void testPersistentStatisticsFromOlderIndexedSSTable() throws 
IOException, ExecutionException, InterruptedException
+    {
+        // copy legacy indexed sstables
+        String root = System.getProperty("legacy-sstable-root");
+        assert root != null;
+        File rootDir = new File(root + File.separator + "hb" + File.separator 
+ "Keyspace1");
+        assert rootDir.isDirectory();
+
+        String[] destDirs = 
DatabaseDescriptor.getAllDataFileLocationsForTable("Keyspace1");
+        assert destDirs != null;
+        assert destDirs.length > 0;
+
+        FileUtils.createDirectory(destDirs[0]);
+        for (File srcFile : rootDir.listFiles())
+        {
+            if (!srcFile.getName().startsWith("Indexed1"))
+                continue;
+            File destFile = new File(destDirs[0] + File.separator + 
srcFile.getName());
+            CLibrary.createHardLinkWithExec(srcFile, destFile);
+
+            destFile = new File(destDirs[0] + File.separator + 
srcFile.getName());
+
+            assert destFile.exists() : destFile.getAbsoluteFile();
+        }
+        ColumnFamilyStore store = 
Table.open("Keyspace1").getColumnFamilyStore("Indexed1");
+
+        // check if opening and querying works
+        assertIndexQueryWorks(store);
+    }
+
+    private void assertIndexQueryWorks(ColumnFamilyStore indexedCFS)
+    {
+        assert "Indexed1".equals(indexedCFS.getColumnFamilyName());
+
+        // make sure all sstables including 2ary indexes load from disk
+        indexedCFS.clearUnsafe();
+        for (ColumnFamilyStore indexCfs : 
indexedCFS.indexManager.getIndexesBackedByCfs())
+        {
+            indexCfs.clearUnsafe();
+            indexCfs.loadNewSSTables(); // v1.0.4 would fail here (see 
CASSANDRA-3540)
+        }
+        indexedCFS.loadNewSSTables();
+
+        // query using index to see if sstable for secondary index opens
+        IndexExpression expr = new 
IndexExpression(ByteBufferUtil.bytes("birthdate"), IndexOperator.EQ, 
ByteBufferUtil.bytes(1L));
+        IndexClause clause = new IndexClause(Arrays.asList(expr), 
ByteBufferUtil.EMPTY_BYTE_BUFFER, 100);
+        IPartitioner p = StorageService.getPartitioner();
+        Range range = new Range(p.getMinimumToken(), p.getMinimumToken());
+        List<Row> rows = indexedCFS.search(clause, range, new 
IdentityQueryFilter());
+        assert rows.size() == 1;
+    }
+
     private List<Range<Token>> makeRanges(Token left, Token right)
     {
         return Arrays.<Range<Token>>asList(new Range[]{ new Range<Token>(left, 
right) });


Reply via email to