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);