Liron Aravot has uploaded a new change for review. Change subject: core: Upload only the DC diskless VMs/Templates to OVF stores ......................................................................
core: Upload only the DC diskless VMs/Templates to OVF stores Since change Iaeecc6c4 OVF data of diskless VMs/Templates is uploaded to all the DC domain. The problem with that change is that the loaded VMs/Templates aren't only for that data center - which is fixed in this change. Change-Id: Ic51689cdf0479548c8c4be1267d478fcb8f89de0 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/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/VmDAOTest.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmStaticDAOTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml M packaging/dbscripts/vms_sp.sql 8 files changed, 118 insertions(+), 23 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/36098/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 ffb7fff..f9fed74 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 @@ -221,7 +221,7 @@ false, false); - vmAndTemplatesIds.addAll(getVmStaticDAO().getVmAndTemplatesIdsWithoutAttachedImageDisks(false)); + vmAndTemplatesIds.addAll(getVmStaticDAO().getVmAndTemplatesIdsWithoutAttachedImageDisks(getParameters().getStoragePoolId(), false)); byte[] bytes = buildOvfInfoFileByteArray(vmAndTemplatesIds); 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 8dbab0d..d06383d 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 @@ -95,9 +95,13 @@ /** * Retrieves all the ids of the vms and templates that have no attached disks matching the provided criteria. - * @param shareableDisks check for attached shareable disks + * + * @param storagePoolId + * the storage pool id of the vms/templates + * @param shareableDisks + * check for attached shareable disks */ - public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(boolean shareableDisks); + public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(Guid storagePoolId, boolean shareableDisks); /** * update vm_static.cpu_profile_id for cluster 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 c4677ca..bd27aa1 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 @@ -58,8 +58,9 @@ } - public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(boolean shareableDisks) { + public List<Guid> getVmAndTemplatesIdsWithoutAttachedImageDisks(Guid storagePoolId, boolean shareableDisks) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("storage_pool_id", storagePoolId) .addValue("shareable", shareableDisks); return getCallsHandler().executeReadList("GetVmsAndTemplatesIdsWithoutAttachedImageDisks", createGuidMapper(), parameterSource); diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java index f5f08dc..5f1aa1f 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java @@ -22,7 +22,7 @@ import org.ovirt.engine.core.compat.Guid; public class VmDAOTest extends BaseDAOTestCase { - private static final int VM_COUNT = 7; + private static final int VM_COUNT = 8; private VmDAO dao; private VM existingVm; private VmStatic newVmStatic; diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java index 0fa46cc..4860c6a 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDynamicDAOTest.java @@ -19,8 +19,6 @@ private static final int DYNAMIC_RUNNING_COUNT = 3; private VmDynamicDAO dao; private VmDynamic existingVm; - private Guid existingStaticGuidVm = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4357"); - private VmDynamic newVmDynamic; @Override public void setUp() throws Exception { @@ -28,8 +26,6 @@ dao = dbFacade.getVmDynamicDao(); existingVm = dao.get(new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355")); existingVm.setStatus(VMStatus.Up); - - newVmDynamic = new VmDynamic(); } /** @@ -76,12 +72,12 @@ @Test public void testSave() { - newVmDynamic.setId(existingStaticGuidVm); - dao.save(newVmDynamic); - VmDynamic vmdynamic = dao.get(newVmDynamic.getId()); + dao.remove(existingVm.getId()); + dao.save(existingVm); + VmDynamic vmdynamic = dao.get(existingVm.getId()); assertNotNull(vmdynamic); - assertEquals(vmdynamic, newVmDynamic); + assertEquals(vmdynamic, existingVm); } /** 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 e105a62..5dda644 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 @@ -10,6 +10,8 @@ import static org.junit.Assert.assertTrue; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import org.apache.commons.lang.NotImplementedException; @@ -25,6 +27,8 @@ import org.ovirt.engine.core.common.utils.ObjectUtils; import org.ovirt.engine.core.common.utils.VmDeviceType; import org.ovirt.engine.core.compat.Guid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author yzaslavs @@ -35,7 +39,7 @@ private static final Guid VDS_STATIC_ID = new Guid("afce7a39-8e8c-4819-ba9c-796d316592e6"); private static final Guid VDS_GROUP_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1"); private static final Guid QUOTA_ID = new Guid("88296e00-0cad-4e5a-9291-008a7b7f4399"); - + protected Logger log = LoggerFactory.getLogger(getClass()); private static final String STATIC_VM_NAME = "rhel5-pool-50"; private static final int NUM_OF_VM_STATIC_IN_FIXTURES = 3; @@ -208,19 +212,51 @@ assertEquals("vm permissions changed during remove although shouldnt have.", numberOfPermissionsBeforeRemove, permissionsDao.getAllForEntity(EXISTING_VM_ID).size()); } + private void checkDisks(Guid id, boolean hasDisks) { + assertEquals(hasDisks, !dbFacade.getDiskDao().getAllForVm(id).isEmpty()); + } + + private void checkVmsDcAndDisks(List<Guid> vmIds, Guid storagePoolId, boolean hasDisks) { + for (Guid vmId : vmIds) { + assertEquals(storagePoolId, dbFacade.getVmDao().get(vmId).getStoragePoolId()); + checkDisks(vmId, hasDisks); + } + } + + private void checkTemplatesDcAndDisks(List<Guid> templateIds, Guid storagePoolId, boolean hasDisks) { + for (Guid templateId : templateIds) { + assertEquals(storagePoolId, dbFacade.getVmTemplateDao().get(templateId).getStoragePoolId()); + checkDisks(templateId, hasDisks); + } + } @Test public void getVmAndTemplatesIdsWithoutAttachedImageDisks() { + List<Guid> disklessVms = Arrays.asList(FixturesTool.VM_WITH_NO_ATTACHED_DISKS, FixturesTool.VM_RHEL5_POOL_51); + List<Guid> disklessTemplates = Arrays.asList(FixturesTool.VM_TEMPLATE_RHEL5_2); + List<Guid> diskVms = Arrays.asList(FixturesTool.VM_RHEL5_POOL_57); + List<Guid> diskTemplates = Arrays.asList(FixturesTool.VM_TEMPLATE_RHEL5); + + Guid dataCenterId = FixturesTool.DATA_CENTER; + + checkTemplatesDcAndDisks(disklessTemplates, dataCenterId, false); + checkVmsDcAndDisks(disklessVms, dataCenterId, false); + checkTemplatesDcAndDisks(diskTemplates, dataCenterId, true); + checkVmsDcAndDisks(diskVms, dataCenterId, true); + // attaching shareable and snapshots disk to a diskless vm - addVmDevice(FixturesTool.VM_WITH_NO_ATTACHED_DISKS, FixturesTool.IMAGE_GROUP_ID_2, null); - addVmDevice(FixturesTool.VM_WITH_NO_ATTACHED_DISKS, FixturesTool.DISK_ID, FixturesTool.EXISTING_SNAPSHOT_ID); + addVmDevice(disklessVms.get(0), FixturesTool.IMAGE_GROUP_ID_2, null); + addVmDevice(disklessVms.get(0), FixturesTool.DISK_ID, FixturesTool.EXISTING_SNAPSHOT_ID); List<Guid> ids = - dao.getVmAndTemplatesIdsWithoutAttachedImageDisks(false); - assertTrue(ids.contains(FixturesTool.VM_RHEL5_POOL_51)); - assertTrue(ids.contains(FixturesTool.VM_TEMPLATE_RHEL5_2)); - assertTrue(ids.contains(FixturesTool.VM_WITH_NO_ATTACHED_DISKS)); - assertFalse(ids.contains(FixturesTool.VM_TEMPLATE_RHEL5)); + dao.getVmAndTemplatesIdsWithoutAttachedImageDisks(dataCenterId, false); + + assertTrue(ids.containsAll(disklessVms)); + assertTrue(ids.containsAll(disklessTemplates)); + assertTrue(Collections.disjoint(ids, diskVms)); + assertTrue(Collections.disjoint(ids, diskTemplates)); + + assertTrue(dao.getVmAndTemplatesIdsWithoutAttachedImageDisks(Guid.newGuid(), false).isEmpty()); } private void addVmDevice(Guid vmId, Guid diskId, Guid snapshotId) { diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index a113f54..b914703 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -3526,6 +3526,47 @@ <value>1</value> </row> <row> + <value>77296e00-0cad-4e5a-9299-008a7b6f4357</value> + <value>0</value> + <null /> + <null /> + <null /> + <null /> + <null /> + <null /> + <null /> + <null /> + <null /> + <null /> <!-- console_user_id --> + <null /> + <null /> + <null /> + <value>afce7a39-8e8c-4819-ba9c-796d316592e6</value> + <value></value> + <value>5900</value> + <value>1</value> + <value>0</value> + <value>0</value> + <value>0</value> + <value>1</value> + <value>-1</value> + <value>0</value> + <null /> + <value></value> + <null /> + <value>42058975-3d5e-484a-80c1-01c31207f578</value> + <value>0</value> + <value>0</value> + <value>0</value> + <null /> + <null/> + <null/> + <null/> + <null/> + <value>-1</value> + <value>1</value> + </row> + <row> <value>77296e00-0cad-4e5a-9299-008a7b6f4355</value> <value>5</value> <null /> @@ -3786,6 +3827,20 @@ <null /> </row> <row> + <value>77296e00-0cad-4e5a-9299-008a7b6f4357</value> + <value>17</value> + <value>0</value> + <value>267308</value> + <value>0</value> + <value>0</value> + <value>17</value> + <value>60</value> + <null /> + <value>1,2,3</value> + <value>1,2,3</value> + <value>1,2,3</value> + </row> + <row> <value>77296e00-0cad-4e5a-9299-008a7b6f4355</value> <value>17</value> <value>0</value> diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql index 163df69..50182a6 100644 --- a/packaging/dbscripts/vms_sp.sql +++ b/packaging/dbscripts/vms_sp.sql @@ -586,7 +586,7 @@ -Create or replace FUNCTION GetVmsAndTemplatesIdsWithoutAttachedImageDisks(v_shareable BOOLEAN) +Create or replace FUNCTION GetVmsAndTemplatesIdsWithoutAttachedImageDisks(v_storage_pool_id UUID, v_shareable BOOLEAN) RETURNS SETOF UUID STABLE AS $procedure$ BEGIN @@ -597,7 +597,10 @@ INNER JOIN base_disks i ON i.disk_id = vd.device_id AND vd.snapshot_id IS NULL - WHERE i.shareable = v_shareable); + WHERE i.shareable = v_shareable) + AND vs.vds_group_id IN (SELECT vg.vds_group_id + FROM vds_groups vg, storage_pool sp + WHERE vg.storage_pool_id = v_storage_pool_id); END; $procedure$ LANGUAGE plpgsql; -- To view, visit http://gerrit.ovirt.org/36098 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic51689cdf0479548c8c4be1267d478fcb8f89de0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Liron Aravot <lara...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches