rymarm opened a new pull request #2333: URL: https://github.com/apache/drill/pull/2333
# [DRILL-8009](https://issues.apache.org/jira/browse/DRILL-8009): DrillConnectionImpl#isValid() doesn't correspond JDBC API ## Description I've add ping function which send message with [RpcMode.PING](http://drill.apache.org/apidocs/org/apache/drill/exec/proto/GeneralRPCProtos.RpcMode.html#PING) to drillbit and after that waits for a response message with [RpcMode.PONG](drill.apache.org/apidocs/org/apache/drill/exec/proto/GeneralRPCProtos.RpcMode.html#PONG). This method is used to validate connection. I add this verification to [DrillConnectionImpl#isValid(int timeout)](https://github.com/apache/drill/blob/5f5ae89392471d237605c0b5e1a337e5bc0e10ff/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java#L522) as it is required by JDBC API [documentation](https://docs.oracle.com/en/java/javase/11/docs/api/java.sql/java/sql/Connection.html#isValid(int)) and gives opportunity accurately validate connection: > The driver shall submit a query on the connection or use some other mechanism that positively verifies the connection is still valid when this method is called Also, I've add to [DrillConnectionImpl#isValid(int timeout)](https://github.com/apache/drill/blob/5f5ae89392471d237605c0b5e1a337e5bc0e10ff/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillConnectionImpl.java#L522) simple check for [channel#isActive()](https://netty.io/4.1/api/io/netty/channel/Channel.html#isActive--). [Previously, in Drill](https://github.com/apache/drill/commit/960f876a1945eee4eeb0d6a98c5c58dfe2eea1a9) were add `PING` and `PONG` RpcMode's, but they was primarily used for "hearbeat" function — to let drillbit know, that connection with client is still alive and now I also used it for client verification of connection to drillbit. I've used listener pattern for checking whether client got `PONG` answer or not. If you think, that this realization is not best, I have ideas how it can be implemented in other, more "netty's" way. ## Documentation No doc impact ## Testing Manual tests with cases: * server (drillbit) closes connection * server (drillbit) shut down * server (drillbit) process has been killed * client (jdbc) lost network connection * client (jdbc) temporary lost connection and restored it until JDBC's ping timeout has been elapsed. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
