Repository: cloudstack
Updated Branches:
  refs/heads/master 7144e9b35 -> e2fe8e649


CLOUDSTACK-8350: Volume attachment failed when user stops the VM during 
attaching DISK.


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

Branch: refs/heads/master
Commit: 5f5909141848649574c471ec2d2e8e295ef80a6c
Parents: 7144e9b
Author: Sanjay Tripathi <sanjay.tripa...@citrix.com>
Authored: Fri Mar 27 14:27:48 2015 +0530
Committer: Sanjay Tripathi <sanjay.tripa...@citrix.com>
Committed: Fri Mar 27 15:26:32 2015 +0530

----------------------------------------------------------------------
 server/src/com/cloud/storage/VolumeApiServiceImpl.java | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5f590914/server/src/com/cloud/storage/VolumeApiServiceImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/VolumeApiServiceImpl.java 
b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
index f04656a..cae1e1d 100644
--- a/server/src/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/com/cloud/storage/VolumeApiServiceImpl.java
@@ -1210,7 +1210,9 @@ public class VolumeApiServiceImpl extends ManagerBase 
implements VolumeApiServic
             destPrimaryStorage = 
_storagePoolDao.findById(exstingVolumeOfVm.getPoolId());
         }
 
-        if (destPrimaryStorage != null && (volumeToAttach.getState() == 
Volume.State.Allocated || volumeToAttach.getState() == Volume.State.Uploaded)) {
+        boolean volumeOnSecondary = volumeToAttach.getState() == 
Volume.State.Uploaded;
+
+        if (destPrimaryStorage != null && (volumeToAttach.getState() == 
Volume.State.Allocated || volumeOnSecondary)) {
             try {
                 newVolumeOnPrimaryStorage = 
_volumeMgr.createVolumeOnPrimaryStorage(vm, volumeToAttach, rootDiskHyperType, 
destPrimaryStorage);
             } catch (NoTransitionException e) {
@@ -1243,6 +1245,13 @@ public class VolumeApiServiceImpl extends ManagerBase 
implements VolumeApiServic
             }
         }
         VolumeVO newVol = _volsDao.findById(newVolumeOnPrimaryStorage.getId());
+        // Getting the fresh vm object in case of volume migration to check 
the current state of VM
+        if (moveVolumeNeeded || volumeOnSecondary) {
+            vm = _userVmDao.findById(vmId);
+            if (vm == null) {
+                throw new InvalidParameterValueException("VM not found.");
+            }
+        }
         newVol = sendAttachVolumeCommand(vm, newVol, deviceId);
         return newVol;
     }

Reply via email to