You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by th...@apache.org on 2016/01/11 18:40:31 UTC

hive git commit: HIVE-12660 : HS2 memory leak with .hiverc file use (Thejas Nair, reviewed by Vaibhav Gumashta, Dong Chen)

Repository: hive
Updated Branches:
  refs/heads/master 104dc3195 -> ef6564a52


HIVE-12660 : HS2 memory leak with .hiverc file use (Thejas Nair, reviewed by Vaibhav Gumashta, Dong Chen)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/ef6564a5
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/ef6564a5
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/ef6564a5

Branch: refs/heads/master
Commit: ef6564a527e1c128432fea5d2baa87d9a31520ea
Parents: 104dc31
Author: Thejas Nair <th...@hortonworks.com>
Authored: Mon Jan 11 09:40:26 2016 -0800
Committer: Thejas Nair <th...@hortonworks.com>
Committed: Mon Jan 11 09:40:26 2016 -0800

----------------------------------------------------------------------
 .../hive/service/cli/session/HiveSessionImpl.java  | 15 ++++++++++++---
 .../cli/session/TestSessionGlobalInitFile.java     | 17 ++++++++++++++---
 2 files changed, 26 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/ef6564a5/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
----------------------------------------------------------------------
diff --git a/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java b/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
index 160b9d5..3c5700b 100644
--- a/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
+++ b/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
@@ -192,11 +192,20 @@ public class HiveSessionImpl implements HiveSession {
     protected int processCmd(String cmd) {
       int rc = 0;
       String cmd_trimed = cmd.trim();
+      OperationHandle opHandle = null;
       try {
-        executeStatementInternal(cmd_trimed, null, false);
+        //execute in sync mode
+        opHandle = executeStatementInternal(cmd_trimed, null, false);
       } catch (HiveSQLException e) {
-        rc = -1;
-        LOG.warn("Failed to execute HQL command in global .hiverc file.", e);
+        LOG.warn("Failed to execute command in global .hiverc file.", e);
+        return -1;
+      }
+      if (opHandle != null) {
+        try {
+          closeOperation(opHandle);
+        } catch (HiveSQLException e) {
+          LOG.warn("Failed to close operation for command in .hiverc file.", e);
+        }
       }
       return rc;
     }

http://git-wip-us.apache.org/repos/asf/hive/blob/ef6564a5/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java
----------------------------------------------------------------------
diff --git a/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java b/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java
index 840a551..55a325d 100644
--- a/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java
+++ b/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java
@@ -22,19 +22,19 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
-import junit.framework.Assert;
 import junit.framework.TestCase;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hive.service.cli.CLIService;
-import org.apache.hive.service.cli.ICLIService;
 import org.apache.hive.service.cli.OperationHandle;
 import org.apache.hive.service.cli.RowSet;
 import org.apache.hive.service.cli.SessionHandle;
+import org.apache.hive.service.cli.operation.OperationManager;
 import org.apache.hive.service.cli.thrift.ThriftBinaryCLIService;
 import org.apache.hive.service.cli.thrift.ThriftCLIServiceClient;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -58,7 +58,7 @@ public class TestSessionGlobalInitFile extends TestCase {
       cliService.start();
     }
 
-    public ICLIService getService() {
+    public CLIService getService() {
       return cliService;
     }
   }
@@ -123,8 +123,15 @@ public class TestSessionGlobalInitFile extends TestCase {
    * setting property.
    */
   private void doTestSessionGlobalInitFile() throws Exception {
+
+    OperationManager operationManager = service.getService().getSessionManager()
+        .getOperationManager();
     SessionHandle sessionHandle = client.openSession(null, null, null);
 
+    // ensure there is no operation related object leak
+    Assert.assertEquals("Verifying all operations used for init file are closed",
+        0, operationManager.getOperations().size());
+
     verifyInitProperty("a", "1", sessionHandle);
     verifyInitProperty("b", "1", sessionHandle);
     verifyInitProperty("c", "1", sessionHandle);
@@ -137,7 +144,10 @@ public class TestSessionGlobalInitFile extends TestCase {
      */
     // Assert.assertEquals("expected uri", api.getAddedResource("jar"));
 
+    Assert.assertEquals("Verifying all operations used for checks are closed",
+        0, operationManager.getOperations().size());
     client.closeSession(sessionHandle);
+
   }
 
   @Test
@@ -175,5 +185,6 @@ public class TestSessionGlobalInitFile extends TestCase {
     Assert.assertEquals(1, rowSet.numRows());
     // we know rowSet has only one element
     Assert.assertEquals(key + "=" + value, rowSet.iterator().next()[0]);
+    client.closeOperation(operationHandle);
   }
 }