[
https://issues.apache.org/jira/browse/CASSANDRA-5893?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aleksey Yeschenko resolved CASSANDRA-5893.
------------------------------------------
Resolution: Won't Fix
CqlParser is generated automatically from Cql.g by ANTLR. I don't see a way to
make it non-recursive, so I'd suggest using smaller batches. Sorry.
> CqlParser throws StackOverflowError on bigger batch operation
> -------------------------------------------------------------
>
> Key: CASSANDRA-5893
> URL: https://issues.apache.org/jira/browse/CASSANDRA-5893
> Project: Cassandra
> Issue Type: Bug
> Components: Core
> Reporter: Vincent Mallet
> Assignee: Aleksey Yeschenko
> Fix For: 1.2.9
>
>
> We are seeing a problem with CQL3/Cassandra 1.2.8 where a large batch
> operation causes the CqlParser to throw a StackOverflowError (-Xss180k
> initially, then -Xss325k).
> Shouldn't a batch be processed iteratively to avoid having to bump stack
> sizes to unreasonably large values?
> Here is more info from the original problem description:
> <<<
> It looks like the CqlParser in 1.2.8 (probably 1.2.x, but i didn't look) is
> implemented recursively in such a way that large batch statements blow up the
> stack. We, of course on a Friday night, have a particular piece of code
> that's hitting a degenerate case that creates a batch of inserts with a VERY
> large number of collection items, and it manifests as a StackOverflow coming
> out the cass servers:
> java.lang.StackOverflowError
> at org.apache.cassandra.cql3.CqlParser.value(CqlParser.java:5266)
> at org.apache.cassandra.cql3.CqlParser.term(CqlParser.java:5627)
> at org.apache.cassandra.cql3.CqlParser.set_tail(CqlParser.java:4807)
> at org.apache.cassandra.cql3.CqlParser.set_tail(CqlParser.java:4813)
> at org.apache.cassandra.cql3.CqlParser.set_tail(CqlParser.java:4813)
> at org.apache.cassandra.cql3.CqlParser.set_tail(CqlParser.java:4813)
> at org.apache.cassandra.cql3.CqlParser.set_tail(CqlParser.java:4813)
> at org.apache.cassandra.cql3.CqlParser.set_tail(CqlParser.java:4813)
> at org.apache.cassandra.cql3.CqlParser.set_tail(CqlParser.java:4813)
> ...
>
> I think in the short term I can give up the atomicity of a batch in this code
> and kind of suck it up, but obviously I'd prefer not to. I'm also not sure if
> I kept a single batch, but split this into smaller pieces in each statement,
> whether that would still fail. I'm guessing I could also crank the hell out
> of the stack size on the servers, but that feels pretty dirty.
> It seems like the CqlParser should probably be implemented in a way that
> isn't quite so vulnerable to this, though I fully accept that this batch is
> koo-koo-bananas.
> >>>
> Thanks!
>
--
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