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

Issues with connection and authentication with Apache Druid

    XMLWordPrintableJSON

Details

    Description

      We are using calcite-avatica-go driver to connect to Apache Druid and facing few issues -

      1. In Go sql package when an idle connection is picked from the pool, ResetSession method is called on the connection. In the drivers implementation of this method here, registerConn method is called which actually does an OpenConnectionRequest with the existing connectionId. On the Druid side it actually throws an exception here saying the connection is already open. I checked other driver implementations like postgres and mysql for ResetSession method and they actually don't open a new connection. So not sure about the reason for doing this here. Any thoughts on this ? Example exception stack trace -
        2023-05-22T19:24:47,357 ERROR [qtp411114562-140] org.apache.druid.sql.avatica.DruidMeta - Connection [fcf73260-cb72-b867-154b-e39a19569c5e] already open.
        org.apache.druid.java.util.common.ISE: Connection [fcf73260-cb72-b867-154b-e39a19569c5e] already open.
            at org.apache.druid.sql.avatica.DruidMeta.openDruidConnection(DruidMeta.java:823) ~[classes/:?]
            at org.apache.druid.sql.avatica.DruidMeta.openConnection(DruidMeta.java:208) ~[classes/:?]
            at org.apache.calcite.avatica.remote.LocalService.apply(LocalService.java:285) ~[avatica-core-1.17.0.jar:1.17.0]
            at org.apache.calcite.avatica.remote.Service$OpenConnectionRequest.accept(Service.java:1770) ~[avatica-core-1.17.0.jar:1.17.0]
            at org.apache.calcite.avatica.remote.Service$OpenConnectionRequest.accept(Service.java:1750) ~[avatica-core-1.17.0.jar:1.17.0]
            at org.apache.calcite.avatica.remote.AbstractHandler.apply(AbstractHandler.java:94) ~[avatica-core-1.17.0.jar:1.17.0]
            at org.apache.calcite.avatica.remote.ProtobufHandler.apply(ProtobufHandler.java:46) ~[avatica-core-1.17.0.jar:1.17.0]
            at org.apache.calcite.avatica.server.AvaticaProtobufHandler.handle(AvaticaProtobufHandler.java:126) ~[avatica-server-1.17.0.jar:1.17.0]
            at org.apache.druid.sql.avatica.DruidAvaticaProtobufHandler.handle(DruidAvaticaProtobufHandler.java:61) ~[classes/:?] 

          2. Username and pwd not being propagated in the JDBC context. Had to add the following code in the Connect method of driver.go to make it work

          if config.avaticaUser != "" {
              c.Info["user"] = config.avaticaUser
          }
          if config.avaticaPassword != "" {
              c.Info["password"] = config.avaticaPassword
          }  

          3. My colleague (Benjamin) found open statement leak as well, fixed here We plan to contribute all back once the issues are fixed.

      Attachments

        Issue Links

          Activity

            People

              francischuang Francis Chuang
              pjain16 Parag Jain
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: