From a831ad125276208119379673f0ace7fbe3287d3c Mon Sep 17 00:00:00 2001 From: nvazquez Date: Sun, 25 Oct 2020 00:33:46 -0300 Subject: [PATCH] Fix detach volume on stopped Vms --- .../cloud/storage/VolumeApiServiceImpl.java | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index 58e1bffaf37..ad3dd30ab8d 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -2054,31 +2054,35 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic if (!sendCommand || (answer != null && answer.getResult())) { // Mark the volume as detached _volsDao.detachVolume(volume.getId()); - String datastoreName = answer.getContextParam("datastoreName"); - if (datastoreName != null) { - StoragePoolVO storagePoolVO = _storagePoolDao.findByUuid(datastoreName); - if (storagePoolVO != null) { + + if (answer != null) { + String datastoreName = answer.getContextParam("datastoreName"); + if (datastoreName != null) { + StoragePoolVO storagePoolVO = _storagePoolDao.findByUuid(datastoreName); + if (storagePoolVO != null) { + VolumeVO volumeVO = _volsDao.findById(volumeId); + volumeVO.setPoolId(storagePoolVO.getId()); + _volsDao.update(volumeVO.getId(), volumeVO); + } else { + s_logger.warn(String.format("Unable to find datastore %s while updating the new datastore of the volume %d", datastoreName, volumeId)); + } + } + + String volumePath = answer.getContextParam("volumePath"); + if (volumePath != null) { VolumeVO volumeVO = _volsDao.findById(volumeId); - volumeVO.setPoolId(storagePoolVO.getId()); + volumeVO.setPath(volumePath); + _volsDao.update(volumeVO.getId(), volumeVO); + } + + String chainInfo = answer.getContextParam("chainInfo"); + if (chainInfo != null) { + VolumeVO volumeVO = _volsDao.findById(volumeId); + volumeVO.setChainInfo(chainInfo); _volsDao.update(volumeVO.getId(), volumeVO); - } else { - s_logger.warn(String.format("Unable to find datastore %s while updating the new datastore of the volume %d", datastoreName, volumeId)); } } - String volumePath = answer.getContextParam("volumePath"); - if (volumePath != null) { - VolumeVO volumeVO = _volsDao.findById(volumeId); - volumeVO.setPath(volumePath); - _volsDao.update(volumeVO.getId(), volumeVO); - } - - String chainInfo = answer.getContextParam("chainInfo"); - if (chainInfo != null) { - VolumeVO volumeVO = _volsDao.findById(volumeId); - volumeVO.setChainInfo(chainInfo); - _volsDao.update(volumeVO.getId(), volumeVO); - } // volume.getPoolId() should be null if the VM we are detaching the disk from has never been started before if (volume.getPoolId() != null) { DataStore dataStore = dataStoreMgr.getDataStore(volume.getPoolId(), DataStoreRole.Primary);