Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Duplicate
-
None
Description
We are using calcite-avatica-go driver to connect to Apache Druid and facing few issues -
- 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
- relates to
-
CALCITE-5752 Error during session reset in avatica go driver
- Closed
-
CALCITE-5753 User and pwd not being propagated to JDBC context from go driver
- Closed
-
CALCITE-5754 Open statement leak in avatica go driver
- Closed
-
CALCITE-5758 Initialize connector info map to prevent panic
- Closed