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() {

Reply via email to