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)