From 4a78277de966848f56584dc5a4bc823dbc618b61 Mon Sep 17 00:00:00 2001 From: Harikrishna Patnala Date: Wed, 18 Oct 2023 14:54:39 +0530 Subject: [PATCH 1/3] Fix deploy as is VM start after template is force deleted --- .../java/com/cloud/template/HypervisorTemplateAdapter.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java index cdd58ce030e1..9bc2db190adf 100644 --- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java +++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java @@ -665,9 +665,6 @@ public boolean delete(TemplateProfile profile) { // Remove template details templateDetailsDao.removeDetails(template.getId()); - // Remove deploy-as-is details (if any) - templateDeployAsIsDetailsDao.removeDetails(template.getId()); - // Remove comments (if any) AnnotationService.EntityType entityType = template.getFormat().equals(ImageFormat.ISO) ? AnnotationService.EntityType.ISO : AnnotationService.EntityType.TEMPLATE; From ebf01dae7a85994cddf6a1f4961b35e576d06ac9 Mon Sep 17 00:00:00 2001 From: Harikrishna Patnala Date: Fri, 20 Oct 2023 10:35:39 +0530 Subject: [PATCH 2/3] Added VMs existance check --- .../cloud/template/HypervisorTemplateAdapter.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java index 9bc2db190adf..1c72cd2c40bd 100644 --- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java +++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java @@ -29,6 +29,8 @@ import javax.inject.Inject; import com.cloud.domain.Domain; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.dao.VMInstanceDao; import org.apache.cloudstack.agent.directdownload.CheckUrlAnswer; import org.apache.cloudstack.agent.directdownload.CheckUrlCommand; import org.apache.cloudstack.annotation.AnnotationService; @@ -142,6 +144,8 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase { private TemplateDeployAsIsDetailsDao templateDeployAsIsDetailsDao; @Inject private AnnotationDao annotationDao; + @Inject + VMInstanceDao _vmInstanceDao; @Override public String getName() { @@ -665,6 +669,14 @@ public boolean delete(TemplateProfile profile) { // Remove template details templateDetailsDao.removeDetails(template.getId()); + // Remove deploy-as-is details (if any and if there are no VMs using it) + if (template.isDeployAsIs()) { + List vmInstanceVOList = _vmInstanceDao.listNonExpungedByTemplate(template.getId()); + if (CollectionUtils.isEmpty(vmInstanceVOList)) { + templateDeployAsIsDetailsDao.removeDetails(template.getId()); + } + } + // Remove comments (if any) AnnotationService.EntityType entityType = template.getFormat().equals(ImageFormat.ISO) ? AnnotationService.EntityType.ISO : AnnotationService.EntityType.TEMPLATE; From 482a80be09355892a0fb875b6ca414e81d345a65 Mon Sep 17 00:00:00 2001 From: Harikrishna Patnala Date: Thu, 26 Oct 2023 11:44:25 +0530 Subject: [PATCH 3/3] Added a method and java doc --- .../template/HypervisorTemplateAdapter.java | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java index 1c72cd2c40bd..1633cd8a360e 100644 --- a/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java +++ b/server/src/main/java/com/cloud/template/HypervisorTemplateAdapter.java @@ -666,16 +666,7 @@ public boolean delete(TemplateProfile profile) { Pair, Long> tmplt = new Pair, Long>(VirtualMachineTemplate.class, template.getId()); _messageBus.publish(_name, EntityManager.MESSAGE_REMOVE_ENTITY_EVENT, PublishScope.LOCAL, tmplt); - // Remove template details - templateDetailsDao.removeDetails(template.getId()); - - // Remove deploy-as-is details (if any and if there are no VMs using it) - if (template.isDeployAsIs()) { - List vmInstanceVOList = _vmInstanceDao.listNonExpungedByTemplate(template.getId()); - if (CollectionUtils.isEmpty(vmInstanceVOList)) { - templateDeployAsIsDetailsDao.removeDetails(template.getId()); - } - } + checkAndRemoveTemplateDetails(template); // Remove comments (if any) AnnotationService.EntityType entityType = template.getFormat().equals(ImageFormat.ISO) ? @@ -686,6 +677,23 @@ public boolean delete(TemplateProfile profile) { return success; } + /** + * removes details of the template and + * if the template is registered as deploy as is, + * then it also deletes the details related to deploy as is only if there are no VMs using the template + * @param template + */ + void checkAndRemoveTemplateDetails(VMTemplateVO template) { + templateDetailsDao.removeDetails(template.getId()); + + if (template.isDeployAsIs()) { + List vmInstanceVOList = _vmInstanceDao.listNonExpungedByTemplate(template.getId()); + if (CollectionUtils.isEmpty(vmInstanceVOList)) { + templateDeployAsIsDetailsDao.removeDetails(template.getId()); + } + } + } + @Override public TemplateProfile prepareDelete(DeleteTemplateCmd cmd) { TemplateProfile profile = super.prepareDelete(cmd);