diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index c7fc1397141..129e75edc80 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -1686,6 +1686,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag @Override @DB public void destroyVolume(VolumeVO volume) throws ConcurrentOperationException { + assert (volume.getState() != Volume.State.Destroy) : "Why destroy method is called for the volume that is already destroyed?"; Transaction txn = Transaction.currentTxn(); txn.start(); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 524d304c9ad..eadc22d35a6 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1541,7 +1541,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager List volumesForThisVm = _volsDao.findByInstance(vm.getId()); for(VolumeVO volume : volumesForThisVm) { try { - _storageMgr.destroyVolume(volume); + if (volume.getState() != Volume.State.Destroy) { + _storageMgr.destroyVolume(volume); + } if (volume.getState() == Volume.State.Ready) { UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VOLUME_DELETE, volume.getAccountId(), volume.getDataCenterId(), volume.getId(), volume.getName());