From 812b0122e2972987e3b4a38cc7431ace78b09145 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Thu, 6 Nov 2014 15:22:34 -0800 Subject: [PATCH] CLOUDSTACK-7683: hold a db lock during vm expunge --- server/src/com/cloud/vm/UserVmManagerImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 2636096d03d..01a692ddfae 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1703,6 +1703,10 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir @Override public boolean expunge(UserVmVO vm, long callerUserId, Account caller) { + vm = _vmDao.acquireInLockTable(vm.getId()); + if (vm == null) { + return false; + } try { List rootVol = _volsDao.findByInstanceAndType(vm.getId(), Volume.Type.ROOT); // expunge the vm @@ -1739,6 +1743,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir } catch (ConcurrentOperationException e) { s_logger.warn("Concurrent operations on expunging " + vm, e); return false; + } finally { + _vmDao.releaseFromLockTable(vm.getId()); } }