Add TCP keepalive option for the hive jdbc driver
-------------------------------------------------
Key: HIVE-2444
URL: https://issues.apache.org/jira/browse/HIVE-2444
Project: Hive
Issue Type: Improvement
Components: JDBC
Affects Versions: 0.7.1
Reporter: Bob Tiernay
When issuing long running jdbc queries it is quite plausibe that due to
stateful firewall rules connections may be dropped due to inactivity. Having
the ability specify this as a jdbc property would help alleviate this issue
when firewall connection inactivity timeouts are greater than the tcp keepalive
time (default of 2 hrs).
As a temporary workaround, one can use reflection on the jdbc connection to set
this option:
{code}
public static Connection getHiveConnection() {
Connection hiveConnection = // create connection
try {
Socket socket = getConnectionSocket( hiveConnection );
socket.setKeepAlive( true );
} catch( SocketException e ) {
throw new RuntimeException( e );
}
return hiveConnection;
}
private static Socket getConnectionSocket( Connection connection ) {
final Field fields[] = connection.getClass().getDeclaredFields();
for( int i = 0; i < fields.length; ++i ) {
if( "transport".equals( fields[i].getName() ) ) {
try {
fields[i].setAccessible( true );
TSocket transport = (TSocket) fields[i].get( connection );
return transport.getSocket();
} catch( Exception e ) {
throw new RuntimeException( e );
}
}
}
return null;
}
{code}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira