Author: jbellis
Date: Wed Aug 24 14:55:17 2011
New Revision: 1161137

URL: http://svn.apache.org/viewvc?rev=1161137&view=rev
Log:
allow sstable2json to work on index sstable files
patch by jbellis and tjake for CASSANDRA-3059

Modified:
    cassandra/branches/cassandra-0.8/CHANGES.txt
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java

Modified: cassandra/branches/cassandra-0.8/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1161137&r1=1161136&r2=1161137&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.8/CHANGES.txt Wed Aug 24 14:55:17 2011
@@ -30,6 +30,7 @@
  * expose rpc timeouts per host in MessagingServiceMBean (CASSANDRA-2941)
  * avoid including cwd in classpath for deb and rpm packages (CASSANDRA-2881)
  * remove gossip state when a new IP takes over a token (CASSANDRA-3071)
+ * allow sstable2json to work on index sstable files (CASSANDRA-3059)
 
 
 0.8.4

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java?rev=1161137&r1=1161136&r2=1161137&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java
 Wed Aug 24 14:55:17 2011
@@ -945,6 +945,16 @@ public final class CFMetaData
         return column_metadata.get(name);
     }
 
+    public ColumnDefinition getColumnDefinitionForIndex(String indexName)
+    {
+        for (ColumnDefinition def : column_metadata.values())
+        {
+            if (indexName.equals(def.getIndexName()))
+                return def;
+        }
+        return null;
+    }
+
     /**
      * Convert a null index_name to appropriate default name according to 
column status
      * @param cf_def Thrift ColumnFamily Definition

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1161137&r1=1161136&r2=1161137&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 Wed Aug 24 14:55:17 2011
@@ -309,11 +309,7 @@ public class ColumnFamilyStore implement
         assert info.getIndexType() != null;
 
         // create the index CFS
-        IPartitioner rowPartitioner = StorageService.getPartitioner();
-        AbstractType columnComparator = (rowPartitioner instanceof 
OrderPreservingPartitioner || rowPartitioner instanceof ByteOrderedPartitioner)
-                                        ? BytesType.instance
-                                        : new 
LocalByPartionerType(StorageService.getPartitioner());
-        final CFMetaData indexedCfMetadata = 
CFMetaData.newIndexMetadata(metadata, info, columnComparator);
+        final CFMetaData indexedCfMetadata = 
CFMetaData.newIndexMetadata(metadata, info, indexComparator());
         ColumnFamilyStore indexedCfs = 
ColumnFamilyStore.createColumnFamilyStore(table,
                                                                                
  indexedCfMetadata.cfName,
                                                                                
  new 
LocalPartitioner(metadata.getColumn_metadata().get(info.name).getValidator()),
@@ -356,6 +352,14 @@ public class ColumnFamilyStore implement
         return f;
     }
 
+    public static AbstractType indexComparator()
+    {
+        IPartitioner rowPartitioner = StorageService.getPartitioner();
+        return (rowPartitioner instanceof OrderPreservingPartitioner || 
rowPartitioner instanceof ByteOrderedPartitioner)
+                                        ? BytesType.instance
+                                        : new 
LocalByPartionerType(StorageService.getPartitioner());
+    }
+
     public void buildSecondaryIndexes(Collection<SSTableReader> sstables, 
SortedSet<ByteBuffer> columns)
     {
         logger.info(String.format("Submitting index build of %s for data in 
%s",

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/io/sstable/SSTableReader.java?rev=1161137&r1=1161136&r2=1161137&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
 Wed Aug 24 14:55:17 2011
@@ -138,8 +138,12 @@ public class SSTableReader extends SSTab
 
     public static SSTableReader open(Descriptor desc) throws IOException
     {
-        Set<Component> components = componentsFor(desc, false);
-        return open(desc, components, 
DatabaseDescriptor.getCFMetaData(desc.ksname, desc.cfname), 
StorageService.getPartitioner());
+        return open(desc, DatabaseDescriptor.getCFMetaData(desc.ksname, 
desc.cfname));
+    }
+
+    public static SSTableReader open(Descriptor desc, CFMetaData metadata) 
throws IOException
+    {
+        return open(desc, componentsFor(desc, false), metadata, 
StorageService.getPartitioner());
     }
 
     public static SSTableReader open(Descriptor descriptor, Set<Component> 
components, CFMetaData metadata, IPartitioner partitioner) throws IOException

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java?rev=1161137&r1=1161136&r2=1161137&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/tools/SSTableExport.java
 Wed Aug 24 14:55:17 2011
@@ -25,6 +25,7 @@ import java.nio.ByteBuffer;
 import java.util.*;
 
 import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.config.ColumnDefinition;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.marshal.AbstractType;
@@ -332,7 +333,23 @@ public class SSTableExport
      */
     public static void export(String ssTableFile, PrintStream outs, String[] 
excludes) throws IOException
     {
-        export(SSTableReader.open(Descriptor.fromFilename(ssTableFile)), outs, 
excludes);
+        Descriptor descriptor = Descriptor.fromFilename(ssTableFile);
+        CFMetaData metadata;
+        if (descriptor.cfname.contains("."))
+        {
+            // look up index metadata from parent
+            int i = descriptor.cfname.indexOf(".");
+            String parentName = descriptor.cfname.substring(0, i);
+            CFMetaData parent = 
DatabaseDescriptor.getCFMetaData(descriptor.ksname, parentName);
+            ColumnDefinition def = 
parent.getColumnDefinitionForIndex(descriptor.cfname.substring(i + 1));
+            metadata = CFMetaData.newIndexMetadata(parent, def, 
ColumnFamilyStore.indexComparator());
+        }
+        else
+        {
+            metadata = DatabaseDescriptor.getCFMetaData(descriptor.ksname, 
descriptor.cfname);
+        }
+
+        export(SSTableReader.open(descriptor, metadata), outs, excludes);
     }
 
     /**


Reply via email to