Author: thejas
Date: Wed Oct  2 23:29:29 2013
New Revision: 1528679

URL: http://svn.apache.org/r1528679
Log:
HIVE-5296: Memory leak: OOM Error after multiple open/closed JDBC connections.  
(Kousuke Saruta via Thejas Nair)

Modified:
    
hive/branches/branch-0.12/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java

Modified: 
hive/branches/branch-0.12/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
URL: 
http://svn.apache.org/viewvc/hive/branches/branch-0.12/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java?rev=1528679&r1=1528678&r2=1528679&view=diff
==============================================================================
--- 
hive/branches/branch-0.12/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
 (original)
+++ 
hive/branches/branch-0.12/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
 Wed Oct  2 23:29:29 2013
@@ -184,13 +184,18 @@ public class HiveSessionImpl implements 
       boolean runAsync)
       throws HiveSQLException {
     acquire();
-    try {
-      ExecuteStatementOperation operation = getOperationManager()
+
+    OperationManager operationManager = getOperationManager();
+    ExecuteStatementOperation operation = operationManager
           .newExecuteStatementOperation(getSession(), statement, confOverlay, 
runAsync);
+    OperationHandle opHandle = operation.getHandle();
+    try {
       operation.run();
-      OperationHandle opHandle = operation.getHandle();
       opHandleSet.add(opHandle);
       return opHandle;
+    } catch (HiveSQLException e) {
+      operationManager.closeOperation(opHandle);
+      throw e;
     } finally {
       release();
     }
@@ -199,12 +204,17 @@ public class HiveSessionImpl implements 
   public OperationHandle getTypeInfo()
       throws HiveSQLException {
     acquire();
+
+    OperationManager operationManager = getOperationManager();
+    GetTypeInfoOperation operation = 
operationManager.newGetTypeInfoOperation(getSession());
+    OperationHandle opHandle = operation.getHandle();
     try {
-      GetTypeInfoOperation operation = 
getOperationManager().newGetTypeInfoOperation(getSession());
       operation.run();
-      OperationHandle opHandle = operation.getHandle();
       opHandleSet.add(opHandle);
       return opHandle;
+    } catch (HiveSQLException e) {
+      operationManager.closeOperation(opHandle);
+      throw e;
     } finally {
       release();
     }
@@ -213,12 +223,17 @@ public class HiveSessionImpl implements 
   public OperationHandle getCatalogs()
       throws HiveSQLException {
     acquire();
+
+    OperationManager operationManager = getOperationManager();
+    GetCatalogsOperation operation = 
operationManager.newGetCatalogsOperation(getSession());
+    OperationHandle opHandle = operation.getHandle();
     try {
-      GetCatalogsOperation operation = 
getOperationManager().newGetCatalogsOperation(getSession());
       operation.run();
-      OperationHandle opHandle = operation.getHandle();
       opHandleSet.add(opHandle);
       return opHandle;
+    } catch (HiveSQLException e) {
+      operationManager.closeOperation(opHandle);
+      throw e;
     } finally {
       release();
     }
@@ -226,14 +241,19 @@ public class HiveSessionImpl implements 
 
   public OperationHandle getSchemas(String catalogName, String schemaName)
       throws HiveSQLException {
-      acquire();
+    acquire();
+
+    OperationManager operationManager = getOperationManager();
+    GetSchemasOperation operation =
+        operationManager.newGetSchemasOperation(getSession(), catalogName, 
schemaName);
+    OperationHandle opHandle = operation.getHandle();
     try {
-      GetSchemasOperation operation =
-          getOperationManager().newGetSchemasOperation(getSession(), 
catalogName, schemaName);
       operation.run();
-      OperationHandle opHandle = operation.getHandle();
       opHandleSet.add(opHandle);
       return opHandle;
+    } catch (HiveSQLException e) {
+      operationManager.closeOperation(opHandle);
+      throw e;
     } finally {
       release();
     }
@@ -242,14 +262,19 @@ public class HiveSessionImpl implements 
   public OperationHandle getTables(String catalogName, String schemaName, 
String tableName,
       List<String> tableTypes)
       throws HiveSQLException {
-      acquire();
+    acquire();
+
+    OperationManager operationManager = getOperationManager();
+    MetadataOperation operation =
+        operationManager.newGetTablesOperation(getSession(), catalogName, 
schemaName, tableName, tableTypes);
+    OperationHandle opHandle = operation.getHandle();
     try {
-      MetadataOperation operation =
-          getOperationManager().newGetTablesOperation(getSession(), 
catalogName, schemaName, tableName, tableTypes);
       operation.run();
-      OperationHandle opHandle = operation.getHandle();
       opHandleSet.add(opHandle);
       return opHandle;
+    } catch (HiveSQLException e) {
+      operationManager.closeOperation(opHandle);
+      throw e;
     } finally {
       release();
     }
@@ -257,13 +282,18 @@ public class HiveSessionImpl implements 
 
   public OperationHandle getTableTypes()
       throws HiveSQLException {
-      acquire();
+    acquire();
+
+    OperationManager operationManager = getOperationManager();
+    GetTableTypesOperation operation = 
operationManager.newGetTableTypesOperation(getSession());
+    OperationHandle opHandle = operation.getHandle();
     try {
-      GetTableTypesOperation operation = 
getOperationManager().newGetTableTypesOperation(getSession());
       operation.run();
-      OperationHandle opHandle = operation.getHandle();
       opHandleSet.add(opHandle);
       return opHandle;
+    } catch (HiveSQLException e) {
+      operationManager.closeOperation(opHandle);
+      throw e;
     } finally {
       release();
     }
@@ -272,13 +302,18 @@ public class HiveSessionImpl implements 
   public OperationHandle getColumns(String catalogName, String schemaName,
       String tableName, String columnName)  throws HiveSQLException {
     acquire();
-    try {
-    GetColumnsOperation operation = 
getOperationManager().newGetColumnsOperation(getSession(),
+
+    OperationManager operationManager = getOperationManager();
+    GetColumnsOperation operation = 
operationManager.newGetColumnsOperation(getSession(),
         catalogName, schemaName, tableName, columnName);
-    operation.run();
     OperationHandle opHandle = operation.getHandle();
+    try {
+    operation.run();
     opHandleSet.add(opHandle);
     return opHandle;
+    } catch (HiveSQLException e) {
+      operationManager.closeOperation(opHandle); 
+      throw e;
     } finally {
       release();
     }
@@ -287,13 +322,18 @@ public class HiveSessionImpl implements 
   public OperationHandle getFunctions(String catalogName, String schemaName, 
String functionName)
       throws HiveSQLException {
     acquire();
+
+    OperationManager operationManager = getOperationManager();
+    GetFunctionsOperation operation = operationManager
+        .newGetFunctionsOperation(getSession(), catalogName, schemaName, 
functionName);
+    OperationHandle opHandle = operation.getHandle();
     try {
-      GetFunctionsOperation operation = getOperationManager()
-          .newGetFunctionsOperation(getSession(), catalogName, schemaName, 
functionName);
       operation.run();
-      OperationHandle opHandle = operation.getHandle();
       opHandleSet.add(opHandle);
       return opHandle;
+    } catch (HiveSQLException e) {
+      operationManager.closeOperation(opHandle);
+      throw e;
     } finally {
       release();
     }


Reply via email to