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