Repository: zeppelin Updated Branches: refs/heads/branch-0.7 c4f208e92 -> 361844c5c
fixed jdbc connection issue. ### What is this PR for? This PR fixes JDBC connection release problem. for example whenever i run not executable command like following  new JDBC connection is made like following. ``` $ netstat -an |grep EST |grep 3306 |wc -l 1 $ netstat -an |grep EST |grep 3306 |wc -l 2 $ netstat -an |grep EST |grep 3306 |wc -l 3 ``` ### What type of PR is it? Bug Fix ### Questions: * Does the licenses files need update? No * Is there breaking changes for older versions? No * Does this needs documentation? No Author: Shim <yooji...@gmail.com> Closes #2582 from astroshim/feat/fixJdbcIssue and squashes the following commits: 9807172a [Shim] fixed close pool issue. 5d534e67 [Shim] a1 2335adf5 [Shim] initialize the variable 9b99d21e [Shim] fixed jdbc connection issue. Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/361844c5 Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/361844c5 Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/361844c5 Branch: refs/heads/branch-0.7 Commit: 361844c5c12de752e477e9b43e87583a9d97be79 Parents: c4f208e Author: Shim <yooji...@gmail.com> Authored: Wed Sep 13 15:26:44 2017 +0900 Committer: Mina Lee <mina...@apache.org> Committed: Wed Sep 13 19:07:11 2017 +0900 ---------------------------------------------------------------------- .../apache/zeppelin/jdbc/JDBCInterpreter.java | 53 +++++++++++++------- .../zeppelin/jdbc/JDBCUserConfigurations.java | 6 --- 2 files changed, 35 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zeppelin/blob/361844c5/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java b/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java index ad456be..c94b959 100644 --- a/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java +++ b/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java @@ -230,11 +230,17 @@ public class JDBCInterpreter extends Interpreter { } private void initConnectionPoolMap() { - for (JDBCUserConfigurations configurations : jdbcUserConfigurationsMap.values()) { + for (String key : jdbcUserConfigurationsMap.keySet()) { + try { + closeDBPool(key, DEFAULT_KEY); + } catch (SQLException e) { + e.printStackTrace(); + } try { + JDBCUserConfigurations configurations = jdbcUserConfigurationsMap.get(key); configurations.initConnectionPoolMap(); - } catch (Exception e) { - logger.error("Error while closing initConnectionPoolMap...", e); + } catch (SQLException e) { + e.printStackTrace(); } } } @@ -357,7 +363,7 @@ public class JDBCInterpreter extends Interpreter { public Connection getConnection(String propertyKey, InterpreterContext interpreterContext) throws ClassNotFoundException, SQLException, InterpreterException, IOException { final String user = interpreterContext.getAuthenticationInfo().getUser(); - Connection connection; + Connection connection = null; if (propertyKey == null || basePropretiesMap.get(propertyKey) == null) { return null; } @@ -553,20 +559,30 @@ public class JDBCInterpreter extends Interpreter { private InterpreterResult executeSql(String propertyKey, String sql, InterpreterContext interpreterContext) { - Connection connection; + Connection connection = null; Statement statement; ResultSet resultSet = null; String paragraphId = interpreterContext.getParagraphId(); String user = interpreterContext.getAuthenticationInfo().getUser(); InterpreterResult interpreterResult = new InterpreterResult(InterpreterResult.Code.SUCCESS); - try { connection = getConnection(propertyKey, interpreterContext); - if (connection == null) { - return new InterpreterResult(Code.ERROR, "Prefix not found."); + } catch (Exception e) { + String errorMsg = Throwables.getStackTraceAsString(e); + try { + closeDBPool(user, propertyKey); + } catch (SQLException e1) { + logger.error("Cannot close DBPool for user, propertyKey: " + user + propertyKey, e1); } + interpreterResult.add(errorMsg); + return new InterpreterResult(Code.ERROR, interpreterResult.message()); + } + if (connection == null) { + return new InterpreterResult(Code.ERROR, "Prefix not found."); + } + try { ArrayList<String> multipleSqlArray = splitSqlQueries(sql); for (int i = 0; i < multipleSqlArray.size(); i++) { String sqlToExecute = multipleSqlArray.get(i); @@ -612,16 +628,6 @@ public class JDBCInterpreter extends Interpreter { } } } - //In case user ran an insert/update/upsert statement - if (connection != null) { - try { - if (!connection.getAutoCommit()) { - connection.commit(); - } - connection.close(); - } catch (SQLException e) { /*ignored*/ } - } - getJDBCConfiguration(user).removeStatement(paragraphId); } catch (Throwable e) { if (e.getCause() instanceof TTransportException && Throwables.getStackTraceAsString(e).contains("GSS") && @@ -638,6 +644,17 @@ public class JDBCInterpreter extends Interpreter { interpreterResult.add(errorMsg); return new InterpreterResult(Code.ERROR, interpreterResult.message()); } + } finally { + //In case user ran an insert/update/upsert statement + if (connection != null) { + try { + if (!connection.getAutoCommit()) { + connection.commit(); + } + connection.close(); + } catch (SQLException e) { /*ignored*/ } + } + getJDBCConfiguration(user).removeStatement(paragraphId); } return interpreterResult; } http://git-wip-us.apache.org/repos/asf/zeppelin/blob/361844c5/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCUserConfigurations.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCUserConfigurations.java b/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCUserConfigurations.java index d00e1e9..0579380 100644 --- a/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCUserConfigurations.java +++ b/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCUserConfigurations.java @@ -48,12 +48,6 @@ public class JDBCUserConfigurations { } public void initConnectionPoolMap() throws SQLException { - Iterator<String> it = poolingDriverMap.keySet().iterator(); - while (it.hasNext()) { - String driverName = it.next(); - poolingDriverMap.get(driverName).closePool(driverName); - it.remove(); - } poolingDriverMap.clear(); isSuccessful.clear(); }