From ade82be393e5578b27d0600a6f188ea7ee395102 Mon Sep 17 00:00:00 2001 From: Santhosh Edukulla Date: Fri, 13 Jun 2014 01:25:20 +0530 Subject: [PATCH] Fixed few resource leak issues Signed-off-by: Daan Hoogland (cherry picked from commit 3c5f64c97ab071451aee7f232d8f2cec6d89044d) --- .../src/com/cloud/vm/dao/UserVmDaoImpl.java | 164 +++++++++++------- 1 file changed, 106 insertions(+), 58 deletions(-) diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java index f72690e8a2a..8c460b59f46 100755 --- a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java +++ b/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java @@ -356,91 +356,139 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use @Override public List listPodIdsHavingVmsforAccount(long zoneId, long accountId) { TransactionLegacy txn = TransactionLegacy.currentTxn(); - PreparedStatement pstmt = null; List result = new ArrayList(); + String sql = LIST_PODS_HAVING_VMS_FOR_ACCOUNT; - try { - String sql = LIST_PODS_HAVING_VMS_FOR_ACCOUNT; - pstmt = txn.prepareAutoCloseStatement(sql); + try(PreparedStatement pstmt = txn.prepareStatement(sql)) { pstmt.setLong(1, zoneId); pstmt.setLong(2, accountId); - - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) { - result.add(rs.getLong(1)); + try(ResultSet rs = pstmt.executeQuery();) + { + while (rs.next()) { + result.add(rs.getLong(1)); + } } + catch (Exception e) { + s_logger.error("listPodIdsHavingVmsforAccount:Exception: " + e.getMessage()); + throw new CloudRuntimeException("listPodIdsHavingVmsforAccount:Exception: " + e.getMessage(), e); + } + txn.commit(); return result; - } catch (SQLException e) { - throw new CloudRuntimeException("DB Exception on: " + LIST_PODS_HAVING_VMS_FOR_ACCOUNT, e); - } catch (Throwable e) { - throw new CloudRuntimeException("Caught: " + LIST_PODS_HAVING_VMS_FOR_ACCOUNT, e); + } catch (Exception e) { + s_logger.error("listPodIdsHavingVmsforAccount:Exception : " + e.getMessage()); + throw new CloudRuntimeException("listPodIdsHavingVmsforAccount:Exception: " + e.getMessage(), e); } + finally { + try{ + if (txn != null) + { + txn.close(); + } + } + catch (Exception e) + { + s_logger.error("listVmDetails:Exception:" + e.getMessage()); + } + } + } @Override public Hashtable listVmDetails(Hashtable userVmDataHash) { TransactionLegacy txn = TransactionLegacy.currentTxn(); - PreparedStatement pstmt = null; - try { int curr_index = 0; - List userVmDataList = new ArrayList(userVmDataHash.values()); - - if (userVmDataList.size() > VM_DETAILS_BATCH_SIZE) { - pstmt = txn.prepareStatement(VM_DETAILS + getQueryBatchAppender(VM_DETAILS_BATCH_SIZE)); - while ((curr_index + VM_DETAILS_BATCH_SIZE) <= userVmDataList.size()) { - // set the vars value - for (int k = 1, j = curr_index; j < curr_index + VM_DETAILS_BATCH_SIZE; j++, k++) { - pstmt.setLong(k, userVmDataList.get(j).getId()); - } - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) { - long vm_id = rs.getLong("vm_instance.id"); - //check if the entry is already there - UserVmData uvm = userVmDataHash.get(vm_id); - if (uvm == null) { - uvm = new UserVmData(); - uvm.setId(vm_id); + if (userVmDataList.size() > VM_DETAILS_BATCH_SIZE) + { + try (PreparedStatement pstmt = txn.prepareStatement(VM_DETAILS + getQueryBatchAppender(VM_DETAILS_BATCH_SIZE));) + { + while ((curr_index + VM_DETAILS_BATCH_SIZE) <= userVmDataList.size()) { + // set the vars value + for (int k = 1, j = curr_index; j < curr_index + VM_DETAILS_BATCH_SIZE; j++, k++) { + pstmt.setLong(k, userVmDataList.get(j).getId()); } - // initialize the data with this row - setUserVmData(uvm, rs); + try(ResultSet rs = pstmt.executeQuery();) + { + while (rs.next()) { + long vm_id = rs.getLong("vm_instance.id"); + //check if the entry is already there + UserVmData uvm = userVmDataHash.get(vm_id); + if (uvm == null) { + uvm = new UserVmData(); + uvm.setId(vm_id); + } + // initialize the data with this row + setUserVmData(uvm, rs); + } + } + catch (Exception e) + { + s_logger.error("listVmDetails:Exception:" + e.getMessage()); + throw new CloudRuntimeException("listVmDetails: Exception:" + e.getMessage(),e); + } + curr_index += VM_DETAILS_BATCH_SIZE; } - rs.close(); - curr_index += VM_DETAILS_BATCH_SIZE; + } + catch (Exception e) + { + s_logger.error("listVmDetails:Exception:" + e.getMessage()); + throw new CloudRuntimeException("listVmDetails: Exception:" + e.getMessage(),e); } } if (curr_index < userVmDataList.size()) { int batch_size = (userVmDataList.size() - curr_index); - pstmt = txn.prepareStatement(VM_DETAILS + getQueryBatchAppender(batch_size)); - // set the vars value - for (int k = 1, j = curr_index; j < curr_index + batch_size; j++, k++) { - pstmt.setLong(k, userVmDataList.get(j).getId()); - } - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) { - long vm_id = rs.getLong("vm_instance.id"); - //check if the entry is already there - UserVmData uvm = userVmDataHash.get(vm_id); - if (uvm == null) { - uvm = new UserVmData(); - uvm.setId(vm_id); + try (PreparedStatement vm_details_pstmt = txn.prepareStatement(VM_DETAILS + getQueryBatchAppender(batch_size))) + { + // set the vars value + for (int k = 1, j = curr_index; j < curr_index + batch_size; j++, k++) { + vm_details_pstmt.setLong(k, userVmDataList.get(j).getId()); + } + try(ResultSet rs = vm_details_pstmt.executeQuery();) { + while (rs.next()) { + long vm_id = rs.getLong("vm_instance.id"); + //check if the entry is already there + UserVmData uvm = userVmDataHash.get(vm_id); + if (uvm == null) { + uvm = new UserVmData(); + uvm.setId(vm_id); + } + // initialize the data with this row + setUserVmData(uvm, rs); + } + } + catch (Exception e) + { + s_logger.error("listVmDetails: Exception:" + e.getMessage()); + throw new CloudRuntimeException("listVmDetails: Exception:" + e.getMessage(),e); } - // initialize the data with this row - setUserVmData(uvm, rs); } - rs.close(); + catch (Exception e) + { + s_logger.error("listVmDetails:Exception:" + e.getMessage()); + throw new CloudRuntimeException("listVmDetails: Exception:" + e.getMessage(),e); + } } - - if (pstmt != null) - pstmt.close(); + txn.commit(); return userVmDataHash; - } catch (SQLException e) { - throw new CloudRuntimeException("DB Exception on: " + VM_DETAILS, e); - } catch (Throwable e) { - throw new CloudRuntimeException("Caught: " + VM_DETAILS, e); + } catch (Exception e) { + s_logger.error("listVmDetails:Exception:" + e.getMessage()); + throw new CloudRuntimeException("listVmDetails:Exception : ", e); } + finally { + try{ + if (txn != null) + { + txn.close(); + } + } + catch (Exception e) + { + s_logger.error("listVmDetails:Exception:" + e.getMessage()); + } + } + } public static UserVmData setUserVmData(UserVmData userVmData, ResultSet rs) throws SQLException {