Liron Aravot has uploaded a new change for review. Change subject: core: OVFs that aren't stored on any domain should be stored on all ......................................................................
core: OVFs that aren't stored on any domain should be stored on all When the VM/Template has no non shareable image disks, its OVF file won't be stored on any domain. This patches changes this behavior by storing those OVFs on all the domains. Change-Id: Iaeecc6c4526800656315842384d83830fdf0b72b Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1138134 Signed-off-by: Liron Aravot <lara...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java M packaging/dbscripts/storages_sp.sql M packaging/dbscripts/vms_sp.sql 8 files changed, 59 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/34292/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java index 5e369d3..f1b8651 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStorageDomainCommand.java @@ -200,6 +200,8 @@ false, false); + vmAndTemplatesIds.addAll(getVmStaticDAO().getVmAndTemplatesIdsWithoutAttachedImageDisks(false, false)); + byte[] bytes = buildOvfInfoFileByteArray(vmAndTemplatesIds); Pair<StorageDomainOvfInfo, DiskImage> lastOvfStoreForUpdate = domainOvfStoresInfoForUpdate.getLast(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java index 4770c88..d22ca69 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ProcessOvfUpdateForStoragePoolCommand.java @@ -47,6 +47,7 @@ private HashSet<Guid> proccessedDomains; private List<Guid> removedOvfIdsInfo; private OvfUpdateProcessHelper ovfUpdateProcessHelper; + private List<Guid> activeDataDomainsIds; public ProcessOvfUpdateForStoragePoolCommand(T parameters) { this(parameters, null); @@ -56,6 +57,7 @@ super(parameters, commandContext); setStoragePoolId(parameters.getStoragePoolId()); ovfUpdateProcessHelper = new OvfUpdateProcessHelper(); + activeDataDomainsIds = new LinkedList<>(); } protected OvfUpdateProcessHelper getOvfUpdateProcessHelper() { @@ -123,6 +125,7 @@ continue; } + activeDataDomainsIds.add(domain.getId()); Integer ovfStoresCountForDomain = Config.<Integer> getValue(ConfigValues.StorageDomainOvfStoreCount); List<StorageDomainOvfInfo> storageDomainOvfInfos = getStorageDomainOvfInfoDAO().getAllForDomain(domain.getId()); @@ -339,6 +342,11 @@ } protected void proccessDisksDomains(List<DiskImage> disks) { + if (disks.isEmpty()) { + proccessedDomains.addAll(activeDataDomainsIds); + return; + } + for (DiskImage disk : disks) { proccessedDomains.addAll(disk.getStorageIds()); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java index b2726ed..77e8c12 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAO.java @@ -94,6 +94,13 @@ public void remove(Guid id, boolean removePermissions); /** + * Retrieves all ids of vms and templates that have no attached disks matching the provided criteria. + * @param shareableDisks check for attached shareable disks + * @param snapshotDisks check for attached snapshotdisks + */ + public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(boolean shareableDisks, boolean snapshotDisks); + + /** * update vm_static.cpu_profile_id for cluster * * @param clusterId diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java index 4011b2f..32aa57f 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmStaticDAODbFacadeImpl.java @@ -64,6 +64,15 @@ .addValue("remove_permissions", removePermissions)); } + + public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(boolean shareableDisks, boolean snapshotDisks) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("active", !snapshotDisks) + .addValue("shareable", shareableDisks); + return getCallsHandler().executeReadList("GetVmAndTemplatesIdsWithoutAttachedImageDisks", + createGuidMapper(), parameterSource); + } + @Override protected MapSqlParameterSource createIdParameterMapper(Guid id) { return getCustomMapSqlParameterSource().addValue("vm_guid", id); diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java index 981372d..20c195f 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java @@ -253,6 +253,10 @@ */ protected static final Guid VM_TEMPLATE_RHEL6_2 = new Guid("1b85420c-b84c-4f29-997e-0eb674b40b82"); + protected static final Guid VM_TEMPLATE_WITHOUT_DISKS = new Guid("1b85420c-b84c-4f29-997e-0eb674b40b80"); + + protected static final Guid VM_WITHOUT_DISKS = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4356"); + /** * Predefined template version for testing with the following properties : * <ul> diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java index 933119d..1537499 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java @@ -204,6 +204,16 @@ assertEquals("vm permissions changed during remove although shouldnt have.", numberOfPermissionsBeforeRemove, permissionsDao.getAllForEntity(EXISTING_VM_ID).size()); } + + @Test + public void getVmAndTemplatesIdsWithoutAttachedImageDisks() { + List<Guid> ids = + dao.getVmAndTemplatesIdsWithoutAttachedImageDisks(false, false); + assertTrue(ids.contains(FixturesTool.VM_WITHOUT_DISKS)); + assertTrue(ids.contains(FixturesTool.VM_TEMPLATE_WITHOUT_DISKS)); + assertFalse(ids.contains(FixturesTool.VM_TEMPLATE_RHEL5)); + } + @Test public void testGetAllNamesPinnedToHostReturnsNothingForRandomHost() throws Exception { assertTrue(dao.getAllNamesPinnedToHost(Guid.newGuid()).isEmpty()); diff --git a/packaging/dbscripts/storages_sp.sql b/packaging/dbscripts/storages_sp.sql index 8ce7d4d..e9a79a4 100644 --- a/packaging/dbscripts/storages_sp.sql +++ b/packaging/dbscripts/storages_sp.sql @@ -279,6 +279,7 @@ + Create or replace FUNCTION Getstorage_poolsByVdsId(v_vdsId UUID) RETURNS SETOF storage_pool STABLE AS $procedure$ diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql index 9892e54..c11247d 100644 --- a/packaging/dbscripts/vms_sp.sql +++ b/packaging/dbscripts/vms_sp.sql @@ -593,6 +593,24 @@ +Create or replace FUNCTION GetVmAndTemplatesIdsWithoutAttachedImageDisks(v_shareable BOOLEAN, v_active BOOLEAN) +RETURNS SETOF UUID STABLE + AS $procedure$ +BEGIN + RETURN QUERY SELECT vs.vm_guid + FROM vm_static vs + WHERE vs.vm_guid NOT IN (SELECT DISTINCT vd.vm_id + FROM vm_device vd INNER JOIN images_storage_domain_view i + ON i.image_group_id = vd.device_id + WHERE i.active = v_active AND i.shareable = v_shareable); +END; $procedure$ +LANGUAGE plpgsql; + + + + + + Create or replace FUNCTION UpdateVmStatic(v_description VARCHAR(4000) , v_free_text_comment text, v_mem_size_mb INTEGER, -- To view, visit http://gerrit.ovirt.org/34292 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iaeecc6c4526800656315842384d83830fdf0b72b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Aravot <lara...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches