[ 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)