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

        

Reply via email to