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

Issues with connection and authentication with Apache Druid




      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.


        Issue Links



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