CLOUDSTACK-4471. If an instance fails to start then mark the volumes allocated 
as part of VM creation as removed and set the volume state as destroyed.
(cherry picked from commit 7cc8ccead541f6089ed48d9a1c335daa458b74fc)

Signed-off-by: animesh <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/daaba129
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/daaba129
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/daaba129

Branch: refs/heads/4.2
Commit: daaba129970d961455d647b8ced110752998ac4d
Parents: 7accca2
Author: Likitha Shetty <[email protected]>
Authored: Tue Aug 27 15:23:31 2013 +0530
Committer: animesh <[email protected]>
Committed: Tue Aug 27 12:54:10 2013 -0700

----------------------------------------------------------------------
 server/src/com/cloud/storage/VolumeManagerImpl.java | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/daaba129/server/src/com/cloud/storage/VolumeManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeManagerImpl.java 
b/server/src/com/cloud/storage/VolumeManagerImpl.java
index 6b7788b..35fe72a 100644
--- a/server/src/com/cloud/storage/VolumeManagerImpl.java
+++ b/server/src/com/cloud/storage/VolumeManagerImpl.java
@@ -2676,8 +2676,14 @@ public class VolumeManagerImpl extends ManagerBase 
implements VolumeManager {
     @Override
     public void destroyVolume(VolumeVO volume) {
         try {
-            volService.destroyVolume(volume.getId());
-        } catch (ConcurrentOperationException e) {
+            // Mark volume as removed if volume has not been created on primary
+            if (volume.getState() == Volume.State.Allocated) {
+                _volsDao.remove(volume.getId());
+                stateTransitTo(volume, Volume.Event.DestroyRequested);
+            } else {
+                volService.destroyVolume(volume.getId());
+            }
+        } catch (Exception e) {
             s_logger.debug("Failed to destroy volume" + volume.getId(), e);
             throw new CloudRuntimeException("Failed to destroy volume" + 
volume.getId(), e);
         }

Reply via email to