From edd5f23e8bb995e714bd6025d7b10ee5298d537c Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Fri, 11 Dec 2020 13:12:39 +0530 Subject: [PATCH] Fix NPE when Volume exists on secondary store but doesn't have a download URL (#4530) Co-authored-by: Pearl Dsilva --- .../main/java/com/cloud/storage/VolumeApiServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java index 8430670ac0c..dfca5cd70d3 100644 --- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java +++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java @@ -2881,8 +2881,12 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic } else if (volumeStoreRef != null) { s_logger.debug("volume " + volumeId + " is already installed on secondary storage, install path is " + volumeStoreRef.getInstallPath()); + VolumeInfo destVol = volFactory.getVolume(volumeId, DataStoreRole.Image); + if (destVol == null) { + throw new CloudRuntimeException("Failed to find the volume on a secondary store"); + } ImageStoreEntity secStore = (ImageStoreEntity) dataStoreMgr.getDataStore(volumeStoreRef.getDataStoreId(), DataStoreRole.Image); - String extractUrl = secStore.createEntityExtractUrl(volumeStoreRef.getInstallPath(), volume.getFormat(), null); + String extractUrl = secStore.createEntityExtractUrl(volumeStoreRef.getInstallPath(), volume.getFormat(), destVol); volumeStoreRef = _volumeStoreDao.findByVolume(volumeId); volumeStoreRef.setExtractUrl(extractUrl); volumeStoreRef.setExtractUrlCreated(DateUtil.now());