Repository: hive Updated Branches: refs/heads/branch-2.0 978bed2f2 -> 1b31f409b
HIVE-12790: Metastore connection leaks in HiveServer2 (Naveen Gangam via Aihua Xu, reviewed by Thejas M Nair, Aihua Xu) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/1b31f409 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/1b31f409 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/1b31f409 Branch: refs/heads/branch-2.0 Commit: 1b31f409b1a1a5241ab20cc0c0a5c39e09444504 Parents: 978bed2 Author: Aihua Xu <aihu...@apache.org> Authored: Fri Feb 5 09:07:34 2016 -0500 Committer: Aihua Xu <aihu...@apache.org> Committed: Fri Feb 5 09:23:31 2016 -0500 ---------------------------------------------------------------------- .../org/apache/hadoop/hive/ql/exec/TaskRunner.java | 12 ++++++++++++ .../apache/hadoop/hive/ql/session/SessionState.java | 13 +++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/1b31f409/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java index ad0abde..f6fd081 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/TaskRunner.java @@ -21,8 +21,11 @@ package org.apache.hadoop.hive.ql.exec; import java.io.Serializable; import java.util.concurrent.atomic.AtomicLong; +import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.hadoop.hive.ql.session.OperationLog; import org.apache.hadoop.hive.ql.session.SessionState; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * TaskRunner implementation. @@ -44,6 +47,8 @@ public class TaskRunner extends Thread { protected Thread runner; + private static transient final Logger LOG = LoggerFactory.getLogger(TaskRunner.class); + public TaskRunner(Task<? extends Serializable> tsk, TaskResult result) { this.tsk = tsk; this.result = result; @@ -74,6 +79,13 @@ public class TaskRunner extends Thread { SessionState.start(ss); runSequential(); } finally { + try { + // Call Hive.closeCurrent() that closes the HMS connection, causes + // HMS connection leaks otherwise. + Hive.closeCurrent(); + } catch (Exception e) { + LOG.warn("Exception closing Metastore connection:" + e.getMessage()); + } runner = null; result.setRunning(false); } http://git-wip-us.apache.org/repos/asf/hive/blob/1b31f409/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java index 5f15557..17634f2 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java @@ -1532,10 +1532,15 @@ public class SessionState { tezSessionState = null; } - closeSparkSession(); - registry.closeCUDFLoaders(); - dropSessionPaths(conf); - unCacheDataNucleusClassLoaders(); + try { + closeSparkSession(); + registry.closeCUDFLoaders(); + dropSessionPaths(conf); + unCacheDataNucleusClassLoaders(); + } finally { + // removes the threadlocal variables, closes underlying HMS connection + Hive.closeCurrent(); + } } private void unCacheDataNucleusClassLoaders() {