Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-906

Avatica JdbcMeta statement IDs are not unique

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.5.0
    • avatica
    • None

    Description

      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.

      Attachments

        1. CALCITE-906.patch
          2 kB
          Jan Van Besien
        2. CALCITE-906-attempt-to-reproduce.patch
          6 kB
          Jan Van Besien

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            julianhyde Julian Hyde
            janvanbesien Jan Van Besien
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment