From 447153f5700b9d3cdd705b23caee828e52f9df6b Mon Sep 17 00:00:00 2001 From: abhishek Date: Tue, 1 Feb 2011 11:12:31 -0800 Subject: [PATCH] bug 8247: when we have vms in error state, we destoy their volumes. then, when we delete account with such vms, we should NOT try and destroy vols already destroyed. status 8247: resolved fixed --- server/src/com/cloud/storage/StorageManagerImpl.java | 4 +++- server/src/com/cloud/user/AccountManagerImpl.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 3e1d82ad2e5..79cf9028e3b 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -2586,7 +2586,9 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag txn.start(); for (VolumeVO vol : volumesForVm) { if (vol.getVolumeType().equals(VolumeType.ROOT)) { - destroyVolume(vol); + //This check is for VM in Error state (volume is already destroyed) + if(!vol.getState().equals(Volume.State.Destroy)) + destroyVolume(vol); toBeExpunged.add(vol); } else { if (s_logger.isDebugEnabled()) { diff --git a/server/src/com/cloud/user/AccountManagerImpl.java b/server/src/com/cloud/user/AccountManagerImpl.java index 1d251dffbec..fe96a51c930 100755 --- a/server/src/com/cloud/user/AccountManagerImpl.java +++ b/server/src/com/cloud/user/AccountManagerImpl.java @@ -72,6 +72,7 @@ import com.cloud.network.security.dao.SecurityGroupDao; import com.cloud.server.Criteria; import com.cloud.storage.StorageManager; import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.Volume; import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; @@ -848,7 +849,8 @@ public class AccountManagerImpl implements AccountManager, AccountService, Manag // Mark the account's volumes as destroyed List volumes = _volumeDao.findDetachedByAccount(accountId); for (VolumeVO volume : volumes) { - _storageMgr.destroyVolume(volume); + if(!volume.getState().equals(Volume.State.Destroy))//This check if for account with vm in error state; when a vm is in error state the vols are already destroyed on that account + _storageMgr.destroyVolume(volume); } //Cleanup security groups