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);
}
/**