This is an automated email from the ASF dual-hosted git repository.
nvazquez pushed a commit to branch 4.15
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.15 by this push:
new e968f3b server: detach data disks before destroying vms (#5356)
e968f3b is described below
commit e968f3b16a8f73715f2017f30ce91599e37c568a
Author: Wei Zhou <[email protected]>
AuthorDate: Sat Aug 28 06:00:04 2021 +0200
server: detach data disks before destroying vms (#5356)
---
server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index 4c615df..af28648 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -2985,7 +2985,9 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
stopVirtualMachine(vmId, VmDestroyForcestop.value());
- detachVolumesFromVm(volumesToBeDeleted);
+ // Detach all data disks from VM
+ List<VolumeVO> dataVols = _volsDao.findByInstanceAndType(vmId,
Volume.Type.DATADISK);
+ detachVolumesFromVm(dataVols);
UserVm destroyedVm = destroyVm(vmId, expunge);
if (expunge) {
@@ -2994,7 +2996,7 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
}
}
- deleteVolumesFromVm(volumesToBeDeleted);
+ deleteVolumesFromVm(volumesToBeDeleted, expunge);
return destroyedVm;
}
@@ -7322,13 +7324,13 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
StringBuilder sb = new StringBuilder();
for (VolumeVO volume : volumes) {
- if (volume.getInstanceId() == null || vmId !=
volume.getInstanceId()) {
+ if (volume.getInstanceId() == null || vmId !=
volume.getInstanceId() || volume.getVolumeType() != Volume.Type.DATADISK) {
sb.append(volume.toString() + "; ");
}
}
if (!StringUtils.isEmpty(sb.toString())) {
- throw new InvalidParameterValueException("The following supplied
volumes are not attached to the VM: " + sb.toString());
+ throw new InvalidParameterValueException("The following supplied
volumes are not DATADISK attached to the VM: " + sb.toString());
}
}
@@ -7353,13 +7355,13 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
}
}
- private void deleteVolumesFromVm(List<VolumeVO> volumes) {
+ private void deleteVolumesFromVm(List<VolumeVO> volumes, boolean expunge) {
for (VolumeVO volume : volumes) {
- boolean deleteResult = _volumeService.deleteVolume(volume.getId(),
CallContext.current().getCallingAccount());
+ Volume result = _volumeService.destroyVolume(volume.getId(),
CallContext.current().getCallingAccount(), expunge, false);
- if (!deleteResult) {
+ if (result == null) {
s_logger.error("DestroyVM remove volume - failed to delete
volume " + volume.getInstanceId() + " from instance " + volume.getId());
}
}