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 <57355700+weizhouapa...@users.noreply.github.com> 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()); } }