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/03/07 13:21:43 UTC

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

    [ https://issues.apache.org/jira/browse/HIVE-6363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13923834#comment-13923834 ] 

chandra sekhar gunturi commented on HIVE-6363:
----------------------------------------------

I think the issue is resolved by [HIVE-4194|https://issues.apache.org/jira/browse/HIVE-4194].
The parseURL is called from two places.
https://github.com/apache/hive/blob/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDriver.java#L233 (from parseURLforPropertyInfo() function)
https://github.com/apache/hive/blob/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java#L122 (Constructor of HiveConnection)

Both are having the condition check if(URI.startsWith("jdbc:hive2://"), hence the parseURL() never gets called when the condition    uri.startsWith(URL_PREFIX)  is false.
But it is good to have fix so that if some one calls the function unconditionally in future, the issue will resurface.

I think [HIVE-4802|https://issues.apache.org/jira/browse/HIVE-4802] did not affect changes made by [HIVE-4194|https://issues.apache.org/jira/browse/HIVE-4194] as conditional call is still in place. 
I was testing this on Hive 0.11 & saw the code for parseURL was not changed from throwing IllegalArgumentException. I think the JIRA can be changed to lower priority.

> 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.10.0, 0.11.0, 0.12.0
>            Reporter: chandra sekhar gunturi
>            Priority: Critical
>              Labels: JDBC, unit-test
>         Attachments: HIVE-6363.patch.1.txt, HIVE-6363.patch.2.txt
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> 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.2#6252)