[ 
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

Reply via email to