Jan Van Besien created CALCITE-906:
--------------------------------------
Summary: Avatica JdbcMeta statementCache id concurrency problem
Key: CALCITE-906
URL: https://issues.apache.org/jira/browse/CALCITE-906
Project: Calcite
Issue Type: Bug
Reporter: Jan Van Besien
Assignee: Julian Hyde
There seems to be a concurrency-related problem with the statementId that is
generated in the JdbcMeta#createStatement for statements in the statementCache.
We use avatica to create a driver which uses the remote RPC protocol to wrap an
existing jdbc driver on the server. We have a test which performs concurrent
queries on multiple connections (using apache commons-pool) which fails often.
If it fails, the following two things are always observed:
* A java.lang.AssertionError on the assert in Meta#count(String connectionId,
int statementId, long updateCount), resulting in the server to send a http 500.
* When logging all used connectionId's and statementId's, I observe the same
statementId to be re-used for different connectionId's.
I don't know exactly how these two problems are related, but it looks like
statementId's are supposed to be unique and currently they are not.
The current approach is to use System.identityHashCode(statement) to calculate
a statementId. Simply replacing this with a random int seems to solve the
problem.
Depending on what the actual uniqueness requirements for the statementId are, a
UUID might be even better (but will have impact on the RPC) or an AtomicInteger.
I'll attach a patch for the random int fix.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)