[ https://issues.apache.org/jira/browse/CALCITE-5719?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Parag Jain updated CALCITE-5719: -------------------------------- 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|https://github.com/apache/calcite-avatica-go/blob/main/connection.go#L236], *registerConn* method is called which actually does an *OpenConnectionRequest* with the existing connectionId. On the Druid side it actually throws an exception [here|https://github.com/apache/druid/blob/master/sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java#L823] saying the connection is already open. I checked other driver implementations like [postgres|https://github.com/jackc/pgx/blob/master/stdlib/sql.go#L307] and [mysql|https://github.com/go-sql-driver/mysql/blob/master/connection.go#L638] 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 - {code:java} 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/:?] {code} 2. Username and pwd not being propagated in the JDBC context. Had to add the following code in the [Connect|https://github.com/apache/calcite-avatica-go/blob/main/driver.go#L64] method of driver.go to make it work {code:java} if config.avaticaUser != "" { c.Info["user"] = config.avaticaUser } if config.avaticaPassword != "" { c.Info["password"] = config.avaticaPassword } {code} 3. My colleague (Benjamin) found open statement leak as well, fixed [here|[https://github.com/apache/calcite-avatica-go/commit/9c0eba2fbe15b3f877ee276b889cbd39e1a8ce2d]] We plan to contribute all back once the issues are fixed. was: 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|https://github.com/apache/calcite-avatica-go/blob/main/connection.go#L236], *registerConn* method is called which actually does an *OpenConnectionRequest* with the existing connectionId. On the Druid side it actually throws an exception [here|https://github.com/apache/druid/blob/master/sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java#L823] saying the connection is already open. I checked other driver implementations like [postgres|https://github.com/jackc/pgx/blob/master/stdlib/sql.go#L307] and [mysql|https://github.com/go-sql-driver/mysql/blob/master/connection.go#L638] 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 - {code:java} 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/:?] {code} 2. Username and pwd not being propagated in the JDBC context. Had to add the following code in the [Connect|https://github.com/apache/calcite-avatica-go/blob/main/driver.go#L64] method of driver.go to make it work {code:java} if config.avaticaUser != "" { c.Info["user"] = config.avaticaUser } if config.avaticaPassword != "" { c.Info["password"] = config.avaticaPassword } {code} 3. My colleague (Benjamin) found open statement leak as well, fixed [here|[https://github.com/apache/calcite-avatica-go/commit/9c0eba2fbe15b3f877ee276b889cbd39e1a8ce2d].] We plan to contribute all back once the issues are fixed. > Issues with connection and authentication with Apache Druid > ----------------------------------------------------------- > > Key: CALCITE-5719 > URL: https://issues.apache.org/jira/browse/CALCITE-5719 > Project: Calcite > Issue Type: Bug > Components: avatica-go > Reporter: Parag Jain > Assignee: Francis Chuang > Priority: Major > Labels: avatica > > 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|https://github.com/apache/calcite-avatica-go/blob/main/connection.go#L236], > *registerConn* method is called which actually does an > *OpenConnectionRequest* with the existing connectionId. On the Druid side it > actually throws an exception > [here|https://github.com/apache/druid/blob/master/sql/src/main/java/org/apache/druid/sql/avatica/DruidMeta.java#L823] > saying the connection is already open. I checked other driver > implementations like > [postgres|https://github.com/jackc/pgx/blob/master/stdlib/sql.go#L307] and > [mysql|https://github.com/go-sql-driver/mysql/blob/master/connection.go#L638] > 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 - > {code:java} > 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/:?] {code} > 2. Username and pwd not being propagated in the JDBC context. Had to add > the following code in the > [Connect|https://github.com/apache/calcite-avatica-go/blob/main/driver.go#L64] > method of driver.go to make it work > {code:java} > if config.avaticaUser != "" { > c.Info["user"] = config.avaticaUser > } > if config.avaticaPassword != "" { > c.Info["password"] = config.avaticaPassword > } {code} > 3. My colleague (Benjamin) found open statement leak as well, fixed > [here|[https://github.com/apache/calcite-avatica-go/commit/9c0eba2fbe15b3f877ee276b889cbd39e1a8ce2d]] > We plan to contribute all back once the issues are fixed. -- This message was sent by Atlassian Jira (v8.20.10#820010)