CLOUDSTACK-7835: Deleted volumes with null UUID and no removed timestamp in 
database still appear.
Also removed CREATING -> DESTROY via DESTROYREQUESTED, which was causing the 
volume to get stuck in expunging
state.


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

Branch: refs/heads/master
Commit: 1d503bb8533d2a7b2a36ac4b76b50308b714494d
Parents: 7a8f511
Author: Sanjay Tripathi <sanjay.tripa...@citrix.com>
Authored: Tue Nov 4 13:27:17 2014 +0530
Committer: Sanjay Tripathi <sanjay.tripa...@citrix.com>
Committed: Tue Nov 4 17:02:50 2014 +0530

----------------------------------------------------------------------
 api/src/com/cloud/storage/Volume.java                         | 1 -
 .../apache/cloudstack/storage/volume/VolumeServiceImpl.java   | 7 ++++++-
 2 files changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1d503bb8/api/src/com/cloud/storage/Volume.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/storage/Volume.java 
b/api/src/com/cloud/storage/Volume.java
index b67a395..91ad955 100755
--- a/api/src/com/cloud/storage/Volume.java
+++ b/api/src/com/cloud/storage/Volume.java
@@ -69,7 +69,6 @@ public interface Volume extends ControlledEntity, Identity, 
InternalIdentity, Ba
             s_fsm.addTransition(Creating, Event.OperationRetry, Creating);
             s_fsm.addTransition(Creating, Event.OperationFailed, Allocated);
             s_fsm.addTransition(Creating, Event.OperationSucceeded, Ready);
-            s_fsm.addTransition(Creating, Event.DestroyRequested, Destroy);
             s_fsm.addTransition(Creating, Event.CreateRequested, Creating);
             s_fsm.addTransition(Ready, Event.ResizeRequested, Resizing);
             s_fsm.addTransition(Resizing, Event.OperationSucceeded, Ready);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1d503bb8/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
 
b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
index 15e040d..21e65f9 100644
--- 
a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
+++ 
b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
@@ -1026,7 +1026,12 @@ public class VolumeServiceImpl implements VolumeService {
                 destroyVolume(srcVolume.getId());
                 srcVolume = volFactory.getVolume(srcVolume.getId());
                 AsyncCallFuture<VolumeApiResult> destroyFuture = 
expungeVolumeAsync(srcVolume);
-                destroyFuture.get();
+                // If volume destroy fails, this could be because of vdi is 
still in use state, so wait and retry.
+                if (destroyFuture.get().isFailed()) {
+                    Thread.sleep(5 * 1000);
+                    destroyFuture = expungeVolumeAsync(srcVolume);
+                    destroyFuture.get();
+                }
                 future.complete(res);
             } catch (Exception e) {
                 s_logger.debug("failed to clean up volume on storage", e);

Reply via email to