You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by sa...@apache.org on 2014/11/04 13:25:06 UTC
[2/2] git commit: updated refs/heads/4.5 to a53d39c
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/a53d39c1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a53d39c1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a53d39c1
Branch: refs/heads/4.5
Commit: a53d39c1b687df22768613d556637c34354cb96b
Parents: 9168d82
Author: Sanjay Tripathi <sa...@citrix.com>
Authored: Tue Nov 4 13:27:17 2014 +0530
Committer: Sanjay Tripathi <sa...@citrix.com>
Committed: Tue Nov 4 17:57:31 2014 +0530
----------------------------------------------------------------------
api/src/com/cloud/storage/Volume.java | 1 -
.../storage/volume/VolumeServiceImpl.java | 19 ++++++++++++++-----
2 files changed, 14 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a53d39c1/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/a53d39c1/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 d97ad60..1297da9 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
@@ -1021,11 +1021,20 @@ public class VolumeServiceImpl implements VolumeService {
srcVolume.processEvent(Event.OperationSuccessed);
destVolume.processEvent(Event.OperationSuccessed, result.getAnswer());
_volumeDao.updateUuid(srcVolume.getId(), destVolume.getId());
- destroyVolume(srcVolume.getId());
- srcVolume = volFactory.getVolume(srcVolume.getId());
- AsyncCallFuture<VolumeApiResult> destroyFuture = expungeVolumeAsync(srcVolume);
- destroyFuture.get();
- future.complete(res);
+ try {
+ destroyVolume(srcVolume.getId());
+ srcVolume = volFactory.getVolume(srcVolume.getId());
+ AsyncCallFuture<VolumeApiResult> destroyFuture = expungeVolumeAsync(srcVolume);
+ // 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);
+ }
return null;
} catch (Exception e) {
s_logger.debug("Failed to process copy volume callback", e);