You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "chandra sekhar gunturi (JIRA)" <ji...@apache.org> on 2014/02/04 08:10:10 UTC

[jira] [Created] (HIVE-6363) IllegalArgumentException is thrown instead of SQLException

chandra sekhar gunturi created HIVE-6363:
--------------------------------------------

             Summary: IllegalArgumentException is thrown instead of SQLException
                 Key: HIVE-6363
                 URL: https://issues.apache.org/jira/browse/HIVE-6363
             Project: Hive
          Issue Type: Bug
          Components: JDBC
    Affects Versions: 0.12.0, 0.11.0, 0.10.0
            Reporter: chandra sekhar gunturi
            Priority: Critical


parseURL in the following code is throwing IllegalArgumentException 
http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java?view=markup 

This is going to break other JDBC based connectors because java.sql.DriverManager doesn’t catch IllegalArgumentException while probing for correct Driver for a given URL. 

A simple test case can have class.forName(org.apache.hive.jdbc.HiveDriver) (Loading hiveserver2 JDBC driver) followed by class.forName(org.apache.hadoop.hive.jdbc.HiveDriver)(Loading hiveserver JDBC driver).

In this case hiveserver connection will fail with BAD URL format for hiveserver. If you reverse the driver loading to hiveserver followed by hiveserver2, both the connections will be successful.

Following code in java.sql.DriverManager is causing the issue 
[[ 
// Worker method called by the public getConnection() methods. 
private static Connection getConnection( 
// Walk through the loaded registeredDrivers attempting to make a connection. 
// Remember the first exception that gets raised so we can reraise it. 

for(DriverInfo aDriver : registeredDrivers) { 
// If the caller does not have permission to load the driver then 
// skip it. 
if(isDriverAllowed(aDriver.driver, callerCL)) { 
try { 
Connection con = aDriver.driver.connect(url, info); 
if (con != null) { 
// Success! 
println("getConnection returning " + aDriver.driver.getClass().getName()); 
return (con); 
} 
} catch (SQLException ex) { 
if (reason == null) { 
reason = ex; 
} 
} 

} else { 
println(" skipping: " + aDriver.getClass().getName()); 
} 

} 

} 
]] 

Marking it as critical because this is going to restrict consuming JDBC driver in production environment where many drivers are loaded on requirement rather than statically loading all drivers.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)