You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Sylvain Lebresne (JIRA)" <ji...@apache.org> on 2015/01/09 16:21:36 UTC

[jira] [Commented] (CASSANDRA-8128) Exception when executing UPSERT

    [ https://issues.apache.org/jira/browse/CASSANDRA-8128?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14271141#comment-14271141 ] 

Sylvain Lebresne commented on CASSANDRA-8128:
---------------------------------------------

What the stack trace is saying is that there is more bind marker in the query than there is values (in other words, the client somehow didn't sent enough values). This should have failed with a meaningful error, but said meaningful error is thrown by {{QueryProcess.process()}} but it it appears that DSE bypass this method using it's own {{DseQueryHandler.process}} and that might be missing the proper check. So I'd first report this through the DataStax support so it gets fixed there (provided I'm right that the check is missing).

Now I suppose your real problem is why less values than needed were sent. It's a good question but it's unlikely a server-side problem. It could a problem in your code, or it could be a problem with your driver triggered by large batches. For instance, one thing that comes to mind is that there is a hard limit in the protocol of 64K values per statement and the java driver used to not validate that properly ([JAVA-515|https://datastax-oss.atlassian.net/browse/JAVA-515] which is fixed in more recent versions of the driver), so if your statement ends up having more than that, it could trigger an overflow that silently trigger this problem.

Anyway, it's unlikely a server side problem (except for the validation problem, but unless proved otherwise, Apache Cassandra does properly validate this case) so closing this. If you have further elements that seems to indicate that Cassandra is to blame, feel free to reopen with those elements.

> Exception when executing UPSERT
> -------------------------------
>
>                 Key: CASSANDRA-8128
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8128
>             Project: Cassandra
>          Issue Type: Bug
>          Components: API
>            Reporter: Jens Rantil
>            Priority: Critical
>              Labels: cql3
>             Fix For: 2.0.12
>
>
> I am putting a bunch of (CQL) rows into Datastax DSE 4.5.1-1. Each upsert is for a single partition key with up to ~3000 clustering keys. I understand to large upsert aren't recommended, but I wouldn't expect to be getting the following exception anyway:
> {noformat}
> ERROR [Native-Transport-Requests:4205136] 2014-10-16 12:00:38,668 ErrorMessage.java (line 222) Unexpected exception during request
> java.lang.IndexOutOfBoundsException: Index: 1749, Size: 1749
>         at java.util.ArrayList.rangeCheck(ArrayList.java:635)
>         at java.util.ArrayList.get(ArrayList.java:411)
>         at org.apache.cassandra.cql3.Constants$Marker.bindAndGet(Constants.java:278)
>         at org.apache.cassandra.cql3.Constants$Setter.execute(Constants.java:307)
>         at org.apache.cassandra.cql3.statements.UpdateStatement.addUpdateForKey(UpdateStatement.java:99)
>         at org.apache.cassandra.cql3.statements.BatchStatement.addStatementMutations(BatchStatement.java:200)
>         at org.apache.cassandra.cql3.statements.BatchStatement.getMutations(BatchStatement.java:145)
>         at org.apache.cassandra.cql3.statements.BatchStatement.execute(BatchStatement.java:251)
>         at org.apache.cassandra.cql3.statements.BatchStatement.execute(BatchStatement.java:232)
>         at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:158)
>         at com.datastax.bdp.cassandra.cql3.DseQueryHandler.statementExecution(DseQueryHandler.java:207)
>         at com.datastax.bdp.cassandra.cql3.DseQueryHandler.process(DseQueryHandler.java:86)
>         at org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:119)
>         at org.apache.cassandra.transport.Message$Dispatcher.messageReceived(Message.java:304)
>         at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
>         at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
>         at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
>         at org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.doRun(ChannelUpstreamEventRunnable.java:43)
>         at org.jboss.netty.handler.execution.ChannelEventRunnable.run(ChannelEventRunnable.java:67)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:745)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)