[ https://issues.apache.org/jira/browse/CASSANDRA-17698?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17691167#comment-17691167 ]
maxwellguo commented on CASSANDRA-17698: ---------------------------------------- For the original secondary index table just use the original data table's partition key as the first clusting key , but the data type is PartitionerDefinedOrder , but this case do not implement the toJSONString method(I think that is not really data type can be used for this). So at first I have got two way to fix this problem, 1: add a partitionKeyType in the PartitionerDefinedOrder as this patch described ,but the PartitionerDefinedOrder 's toString result will be store in the meta file of sstable, this way I changed the sstable content; 2.use the partitionkey real type as the secondary index table's first clustering key (not PartitionerDefinedOrder), but this will also change the content of secondary index's table 's sstable file( the old version 's sstable file 's meta store the PartitionerDefinedOrder's toString , now change to data table's paritition key toString ) [here|https://github.com/apache/cassandra/pull/2118/files#diff-a7e8323c9332e6c0d12b0ef92709fa241342fc505a4bdf144b146e9f22cb9adaR738] Both can solve the problem, and both change the content of sstable.For me I have chosen the first one ,as I use PartitionerDefinedOrder as index's table's first clusting key, and I just want to implement the toJSONString method , for the old version that do not have a paritionKeyType in PartitionerDefinedOrder the original method path can be executed. Besides, I think this is a low risk modification method, for I do not change the original schema of secondary index(the first clustering key type is still PartitionerDefinedOrder). > sstabledump errors when dumping data from index > ----------------------------------------------- > > Key: CASSANDRA-17698 > URL: https://issues.apache.org/jira/browse/CASSANDRA-17698 > Project: Cassandra > Issue Type: Bug > Components: Tool/sstable > Reporter: Stefan Miklosovic > Assignee: maxwellguo > Priority: Normal > Fix For: 5.x > > Time Spent: 12h 40m > Remaining Estimate: 0h > > {code:java} > cqlsh> CREATE KEYSPACE ks1 WITH replication = {'class': 'SimpleStrategy', > 'replication_factor': 1}; > cqlsh> CREATE TABLE ks1.tb1 ( id text, name text, primary key (id)); > cqlsh> CREATE INDEX IF NOT EXISTS ON ks1.tb1(name); > cqlsh> INSERT INTO ks1.tb1 (id, name ) VALUES ( '1', 'Joe'); > cqlsh> exit > ./bin/nodetool flush > ./tools/bin/sstabledump > data/data/ks1/tb1-1c3c5f10ee4711ecab82eda2f44200b3/.tb1_name_idx/nb-1-big-Data.db > > [ > { > "partition" : { > "key" : [ "Joe" ], > "position" : 0 > }, > "rows" : [ > { > "type" : "row", > "position" : 17, > "clustering" : [ ] } ] } ]Exception in thread "main" > java.lang.UnsupportedOperationException > at > org.apache.cassandra.db.marshal.PartitionerDefinedOrder.toJSONString(PartitionerDefinedOrder.java:87) > at > org.apache.cassandra.db.marshal.AbstractType.toJSONString(AbstractType.java:187) > at > org.apache.cassandra.tools.JsonTransformer.serializeClustering(JsonTransformer.java:372) > at > org.apache.cassandra.tools.JsonTransformer.serializeRow(JsonTransformer.java:269) > at > org.apache.cassandra.tools.JsonTransformer.serializePartition(JsonTransformer.java:235) > at > java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) > at > java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) > at java.util.Iterator.forEachRemaining(Iterator.java:116) > at > java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) > at > java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) > at > java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) > at > java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) > at > java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) > at > java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) > at > org.apache.cassandra.tools.JsonTransformer.toJson(JsonTransformer.java:113) > at > org.apache.cassandra.tools.SSTableExport.main(SSTableExport.java:214) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org