[ 
https://issues.apache.org/jira/browse/CASSANDRA-4093?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sylvain Lebresne updated CASSANDRA-4093:
----------------------------------------

    Attachment: 4093.txt

So the problem is the following: for CQL3, we've introduced the fact that when 
we have a composite comparator, the 'name' of a ColumnDefinition refers to the 
last component of the composite comparator. In other words, one should use the 
last comparator of the composite comparator to parse the ColumnDefinition name, 
but the CLI doesn't know that. So we do need to fix the CLI.

However, now that I think about this, I realize we may have been a little bit 
careless when doing that, because the current code basically *assumes* that if 
you have a composite comparator, then ColumnDefinition refers to the last 
component of those. That may break compatibility for user using composite type 
today. I'm not sure how many people use composite comparators *and* have 
ColumnDefinition on them, but we probably shouldn't assume nobody does that.

So I think to fix that we need to add a new information to ColumnDefinition, 
which if the comparator of the CF is a composite type, to which component the 
definition apply (or if it apply to the column name as a whole). Attached a 
patch that does just that. I'll note that while we could probably do with a 
boolean in that case (since currently we only have 2 cases: either the 
definition apply to the full column name or it applies to the last component), 
but the full generality of specifying which component exactly the definition 
apply to will likely be useful if we allow defining secondary index of other 
parts of the composite (CASSANDRA-3680). Note that the patch does fix the CLI 
following that change.

                
> schema_* CFs do not respect column comparator which leads to CLI commands 
> failure.
> ----------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-4093
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4093
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Tools
>    Affects Versions: 1.1.0
>            Reporter: Dave Brosius
>            Assignee: Sylvain Lebresne
>             Fix For: 1.1.0
>
>         Attachments: 4093.txt, CASSANDRA-4093-CD-changes.patch
>
>
> ColumnDefinition.{ascii, utf8, bool, ...} static methods used to initialize 
> schema_* CFs column_metadata do not respect CF comparator and use 
> ByteBufferUtil.bytes(...) for column names which creates problems in CLI and 
> probably in other places.
> The CompositeType validator throws exception on first column
> String columnName = columnNameValidator.getString(columnDef.name);
> Because it appears the composite type length header is wrong (25455)
> AbstractCompositeType.getWithShortLength
> java.lang.IllegalArgumentException
>       at java.nio.Buffer.limit(Buffer.java:247)
>       at 
> org.apache.cassandra.db.marshal.AbstractCompositeType.getBytes(AbstractCompositeType.java:50)
>       at 
> org.apache.cassandra.db.marshal.AbstractCompositeType.getWithShortLength(AbstractCompositeType.java:59)
>       at 
> org.apache.cassandra.db.marshal.AbstractCompositeType.getString(AbstractCompositeType.java:139)
>       at 
> org.apache.cassandra.cli.CliClient.describeColumnFamily(CliClient.java:2046)
>       at 
> org.apache.cassandra.cli.CliClient.describeKeySpace(CliClient.java:1969)
>       at 
> org.apache.cassandra.cli.CliClient.executeShowKeySpaces(CliClient.java:1574)
> (seen in trunk)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to