diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java index c3a17c1..2ea2b02 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java @@ -63,6 +63,7 @@ import javax.net.ssl.TrustManagerFactory; import javax.security.sasl.Sasl; import javax.security.sasl.SaslException; + import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.InvocationHandler; @@ -176,6 +177,13 @@ public HiveConnection(String uri, Properties info) throws SQLException { } private void openTransport() throws SQLException { + int numRetries = 0; + int maxRetries = 1; + try { + maxRetries = Integer.parseInt(sessConfMap.get(JdbcConnectionParams.RETRIES)); + } catch(NumberFormatException e) { + } + while (true) { try { assumeSubject = @@ -208,8 +216,15 @@ private void openTransport() throws SQLException { } else { LOG.info("Transport Used for JDBC connection: " + sessConfMap.get(JdbcConnectionParams.TRANSPORT_MODE)); - throw new SQLException("Could not open client transport with JDBC Uri: " + jdbcUriString - + ": " + e.getMessage(), " 08S01", e); + + // Retry maxRetries times + String errMsg = "Could not open client transport with JDBC Uri: " + + jdbcUriString + ": " + e.getMessage(); + if (++numRetries >= maxRetries) { + throw new SQLException(errMsg, " 08S01", e); + } else { + LOG.warn(errMsg + " Retrying " + numRetries + " of " + maxRetries); + } } } } diff --git a/jdbc/src/java/org/apache/hive/jdbc/Utils.java b/jdbc/src/java/org/apache/hive/jdbc/Utils.java index 080e8fc..754f89f 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/Utils.java +++ b/jdbc/src/java/org/apache/hive/jdbc/Utils.java @@ -72,6 +72,10 @@ // client side params are specified in sess_var_list // Client param names: + + // Retry setting + static final String RETRIES = "retries"; + static final String AUTH_TYPE = "auth"; // We're deprecating this variable's name. static final String AUTH_QOP_DEPRECATED = "sasl.qop";