From bd7d41bf6d8197dc739663c2287f40508566d1f5 Mon Sep 17 00:00:00 2001 From: Nicolas Vazquez Date: Fri, 6 Mar 2020 05:02:19 -0300 Subject: [PATCH] server: fix VM with ISO attached migration issue (#3935) As previously described by PR #3929: If vm has attached ISO, the migration fails with error message "org.libvirt.LibvirtException: Cannot access storage file /mnt/b33e5a1d-e4ea-3465-b6ac-c98dc8ff8af0/207-2-cc5fd717-2d57-3bb3-bcf6-2c930268db6c.iso" --- .../cloudstack/storage/image/TemplateDataFactoryImpl.java | 2 +- .../src/main/java/com/cloud/template/TemplateManagerImpl.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateDataFactoryImpl.java b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateDataFactoryImpl.java index afce5d2d27d..8343a74d60b 100644 --- a/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateDataFactoryImpl.java +++ b/engine/storage/image/src/main/java/org/apache/cloudstack/storage/image/TemplateDataFactoryImpl.java @@ -68,7 +68,7 @@ public class TemplateDataFactoryImpl implements TemplateDataFactory { @Override public TemplateInfo getTemplate(long templateId, DataStore store) { VMTemplateVO templ = imageDataDao.findById(templateId); - if (store == null) { + if (store == null && !templ.isDirectDownload()) { TemplateObject tmpl = TemplateObject.getTemplate(templ, null); return tmpl; } diff --git a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java index 93905fc0f3f..749f272bf36 100755 --- a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java @@ -584,10 +584,8 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager, } poolId = storagePool.getId(); } - template = prepareIso(vm.getIsoId(), vm.getDataCenterId(), dest.getHost().getId(), poolId); - } else { - template = _tmplFactory.getTemplate(vm.getIsoId(), DataStoreRole.Primary, dest.getDataCenter().getId()); } + template = prepareIso(vm.getIsoId(), vm.getDataCenterId(), dest.getHost().getId(), poolId); if (template == null){ s_logger.error("Failed to prepare ISO on secondary or cache storage");