Hello,

in a downstream project we have experienced a strange phenomenon around
Calcite SQL parser.
To sum up, while running (sequentially) several thousand times (around 20K)
different instances of the "same" query (not sure if the query itself is
relevant, but just in case I share how it looks like):
  SELECT ... FROM ... WHERE group = value1 OR group = value2 OR .... OR
group = value255
(i.e. the same "big-OR query", just with different up-to 255 group values
every time).

After a certain time (I don't know exactly at which point, but certainly
after thousands of successful query executions), the process just hangs,
not moving forward. Looking at a profiling and thread dump [3], it seems to
be hanging inside Calcite's SqlParserImpl#jj_scan_token, specifically in
the following line (which seems quite inoffensive):
  if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;

After waiting several hours, we aborted the process, we tried again, and no
sight of the problem: it ran completely without any problem. In fact this
process has been executed plenty of times, and this is the first (and for
the moment only) time that we see this issue.

Glooging a bit, I found some old Apache Velocity tickets [1] & [2], that
seem to describe the same (or at least a very similar) issue.
Unfortunately, these tickets were closed long time ago as "Cannot
Reproduce", without finding the root cause or a solution for the problem.

I was just wondering, has anyone ever seen something like that before (with
Calcite or another JavaCC-based project)?

Best,
Ruben

[1] https://issues.apache.org/jira/browse/VELOCITY-562
[2] https://issues.apache.org/jira/browse/VELOCITY-775

[3]
"MatchingResultStorage-Thread" - Thread t@377
   java.lang.Thread.State: RUNNABLE
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_scan_token(SqlParserImpl.java:35424)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_367(SqlParserImpl.java:31402)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_277(SqlParserImpl.java:31391)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_450(SqlParserImpl.java:31310)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_375(SqlParserImpl.java:31349)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_492(SqlParserImpl.java:31500)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_465(SqlParserImpl.java:31513)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_396(SqlParserImpl.java:31412)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_310(SqlParserImpl.java:31461)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_201(SqlParserImpl.java:32253)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_99(SqlParserImpl.java:32267)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3_51(SqlParserImpl.java:33050)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_83(SqlParserImpl.java:33057)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3R_90(SqlParserImpl.java:33971)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3_47(SqlParserImpl.java:33314)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_3_48(SqlParserImpl.java:33753)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.jj_2_48(SqlParserImpl.java:29499)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.Expression2(SqlParserImpl.java:15963)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.Expression(SqlParserImpl.java:15673)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.WhereOpt(SqlParserImpl.java:10650)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlSelect(SqlParserImpl.java:4330)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.LeafQuery(SqlParserImpl.java:630)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.LeafQueryOrExpr(SqlParserImpl.java:15656)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.QueryOrExpr(SqlParserImpl.java:15118)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.OrderedQueryOrExpr(SqlParserImpl.java:504)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlStmt(SqlParserImpl.java:3700)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.SqlStmtEof(SqlParserImpl.java:3738)
at
com.onwbp.org.apache.calcite.sql.parser.impl.SqlParserImpl.parseSqlStmtEof(SqlParserImpl.java:199)
at
com.onwbp.org.apache.calcite.sql.parser.SqlParser.parseQuery(SqlParser.java:153)
...
at java.lang.Thread.run(Thread.java:748)   Locked ownable synchronizers:
- locked <5826639> (a
java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)

Reply via email to