[
https://issues.apache.org/jira/browse/CASSANDRA-5138?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13549860#comment-13549860
]
Sylvain Lebresne commented on CASSANDRA-5138:
---------------------------------------------
bq. I thought #2 (validate on insert) was the plan for CASSANDRA-4377.
CASSANDRA-4377 stopped at "make sure well formed thrift query do not crash".
Making sure you don't do something that would break CQL3 require a bit more.
For instance, in theory we should refuse a query that adds a column in a CQL
row that doesn't exist in the metadata (it could be that doing so doesn't
really "break" anything but honestly I have no clue if that's the case in
practice). Anyway, maybe doing some basic validation is not too hard. But I'm
afraid it will be easy to forget validating something that breaks CQL3 in
subtle ways. So ok for adding validation on a best effort basis, but I think we
should still be clear that this is not encouraged and you have to do it at your
own risk.
> Provide a better CQL error when table data does not conform to CQL metadata.
> ----------------------------------------------------------------------------
>
> Key: CASSANDRA-5138
> URL: https://issues.apache.org/jira/browse/CASSANDRA-5138
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Affects Versions: 1.2.0
> Environment: Mac OS X running 1.2
> Reporter: Brian ONeill
> Priority: Minor
> Attachments: northpole.cql
>
>
> When you create a table via CQL, then insert into it via Thrift. If you
> inadvertently leave out a component of the column name, in CQL you receive a:
> TSocket read 0 bytes
> Server-side the following exception is logged:
> ERROR 15:19:18,016 Error occurred during processing of message.
> java.lang.ArrayIndexOutOfBoundsException: 3
> at
> org.apache.cassandra.cql3.statements.ColumnGroupMap.add(ColumnGroupMap.java:43)
> at
> org.apache.cassandra.cql3.statements.ColumnGroupMap.access$200(ColumnGroupMap.java:31)
> at
> org.apache.cassandra.cql3.statements.ColumnGroupMap$Builder.add(ColumnGroupMap.java:138)
> at
> org.apache.cassandra.cql3.statements.SelectStatement.process(SelectStatement.java:805)
> at
> org.apache.cassandra.cql3.statements.SelectStatement.processResults(SelectStatement.java:145)
> at
> org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:134)
> at
> org.apache.cassandra.cql3.statements.SelectStatement.execute(SelectStatement.java:61)
> at
> org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:132)
> at
> org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:140)
> at
> org.apache.cassandra.thrift.CassandraServer.execute_cql3_query(CassandraServer.java:1686)
> at
> org.apache.cassandra.thrift.Cassandra$Processor$execute_cql3_query.getResult(Cassandra.java:4074)
> at
> org.apache.cassandra.thrift.Cassandra$Processor$execute_cql3_query.getResult(Cassandra.java:4062)
> at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
> at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
> at
> org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:199)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:680)
> I'll submit a schema, and steps to reproduce.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira