Idan Shaby has uploaded a new change for review. Change subject: core: Empty Change CD List when ISO is Inactive ......................................................................
core: Empty Change CD List when ISO is Inactive The VM's Change CD list should be empty when the ISO domain in the DC is inactive. Change-Id: I784be2510e2f51be277f7ee06a5bd5573ab23d66 Bug-Url: https://bugzilla.redhat.com/1085398 Signed-off-by: Idan Shaby <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQuery.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQueryTest.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.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/StorageDomainDAOTest.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StoragePoolDAOTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml M packaging/dbscripts/storages_sp.sql 9 files changed, 227 insertions(+), 12 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/66/34866/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQuery.java index 8997568..f465732 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQuery.java @@ -1,6 +1,7 @@ package org.ovirt.engine.core.bll; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.queries.GetImagesListByStoragePoolIdParameters; import org.ovirt.engine.core.compat.Guid; @@ -21,7 +22,8 @@ @Override protected Guid getStorageDomainIdForQuery() { if (doesUserHavePermissionsOnStoragePool()) { - return getDbFacade().getStorageDomainDao().getIsoStorageDomainIdForPool(getStoragePoolId()); + return getDbFacade().getStorageDomainDao().getIsoStorageDomainIdForPool( + getStoragePoolId(), StorageDomainStatus.Active); } return null; } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQueryTest.java index 512c2e3..fd58863 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQueryTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetImagesListByStoragePoolIdQueryTest.java @@ -17,6 +17,7 @@ import org.junit.runners.Parameterized.Parameters; import org.ovirt.engine.core.common.businessentities.ImageFileType; import org.ovirt.engine.core.common.businessentities.RepoImage; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.queries.GetImagesListByStoragePoolIdParameters; import org.ovirt.engine.core.compat.Guid; @@ -75,7 +76,8 @@ mockStoragePoolDAO(new StoragePool()); StorageDomainDAO storageDomainDAOMock = mock(StorageDomainDAO.class); - when(storageDomainDAOMock.getIsoStorageDomainIdForPool(getQueryParameters().getStoragePoolId())).thenReturn(storageDomainId); + when(storageDomainDAOMock.getIsoStorageDomainIdForPool(getQueryParameters().getStoragePoolId(), + StorageDomainStatus.Active)).thenReturn(storageDomainId); when(getQuery().getDbFacade().getStorageDomainDao()).thenReturn(storageDomainDAOMock); assertEquals("wrong storage domain id", storageDomainId, getQuery().getStorageDomainIdForQuery()); diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAO.java index 60d97bf..ef9aa46 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAO.java @@ -4,6 +4,7 @@ import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.compat.Guid; @@ -34,13 +35,23 @@ StorageDomain getStorageDomain(Guid poolId, StorageDomainType type); /** + * Retrieves the storage domain for the specified pool, type and status. + * + * @param storagePoolId The storage pool. + * @param type The storage domain type. + * @param status The storage domain status. + * @return the storage domain for the specified pool, type and status. + */ + StorageDomain getStorageDomain(Guid storagePoolId, StorageDomainType type, StorageDomainStatus status); + + /** * Retrieves the master storage domain for the specified pool. * - * @param pool + * @param poolId * the storage pool * @return the master storage domain */ - Guid getIsoStorageDomainIdForPool(Guid pool); + Guid getIsoStorageDomainIdForPool(Guid poolId, StorageDomainStatus status); /** * Retrieves the storage domain with specified id. diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.java index 8df6777..914f4b3 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageDomainDAODbFacadeImpl.java @@ -28,16 +28,22 @@ @Override public StorageDomain getStorageDomain(Guid poolId, StorageDomainType type) { - return getCallsHandler().executeRead("Getstorage_domain_by_type_and_storagePoolId", + return getStorageDomain(poolId, type, null); + } + + public StorageDomain getStorageDomain(Guid poolId, StorageDomainType type, StorageDomainStatus status) { + Integer statusNum = status == null ? null : status.getValue(); + return getCallsHandler().executeRead("Getstorage_domain_by_type_storagePoolId_and_status", StorageDomainRowMapper.instance, getCustomMapSqlParameterSource() .addValue("storage_pool_id", poolId) - .addValue("storage_domain_type", type.getValue())); + .addValue("storage_domain_type", type.getValue()) + .addValue("status", statusNum)); } @Override - public Guid getIsoStorageDomainIdForPool(Guid poolId) { - return getStorageDomainId(poolId, StorageDomainType.ISO); + public Guid getIsoStorageDomainIdForPool(Guid poolId, StorageDomainStatus status) { + return getStorageDomainId(poolId, StorageDomainType.ISO, status); } @Override @@ -220,8 +226,19 @@ * @return the storage domain id of the given type for the given storage pool id. */ private Guid getStorageDomainId(Guid poolId, StorageDomainType type) { + return getStorageDomainId(poolId, type, null); + } + + /** + * Gets the storage domain id of the given type for the given storage pool id, type and status. + * + * @param poolId The storage pool id, + * @param type The storage domain type. + * @return the storage domain id of the given type for the given storage pool id. + */ + private Guid getStorageDomainId(Guid poolId, StorageDomainType type, StorageDomainStatus status) { Guid returnValue = Guid.Empty; - StorageDomain domain = getStorageDomain(poolId, type); + StorageDomain domain = getStorageDomain(poolId, type, status); if (domain != null) { returnValue = domain.getId(); } 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 b07e3a8..2c6b50a 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 @@ -13,6 +13,11 @@ public static final Guid STORAGE_POOL_NFS = new Guid("72b9e200-f48b-4687-83f2-62828f249a47"); /** + * Predefined NFS storage pool with a single inactive ISO domain. + */ + public static final Guid STORAGE_POOL_NFS_INACTIVE_ISO = new Guid("6d849ebf-755f-4552-ad09-9a090cda105c"); + + /** * Predefined mixed types storage pool. */ public static final Guid STORAGE_POOL_MIXED_TYPES = new Guid("386bffd1-e7ed-4b08-bce9-d7df10f8c9a0"); @@ -68,6 +73,11 @@ protected static final Guid STORAGE_DOAMIN_NFS_ISO = new Guid("17e7489d-d490-4681-a322-073ca19bd33d"); /** + * Predefined inactive NFS iso storage domain. + */ + protected static final Guid STORAGE_DOMAIN_NFS_INACTIVE_ISO = new Guid("72e3a666-89e1-4005-a7ca-f7548004a9aa"); + + /** * Predefined shared iso storage domain for both the storgae pools */ protected static final Guid SHARED_ISO_STORAGE_DOAMIN_FOR_SP2_AND_SP3 = diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java index be04987..acfbc2f 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java @@ -13,6 +13,7 @@ import org.ovirt.engine.core.common.businessentities.BaseDisk; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmTemplate; @@ -63,6 +64,60 @@ assertGetResult(result); } + @Test + public void testGetStorageDomainWithStatusForExistingPool() { + StorageDomain result = dao.getStorageDomain(FixturesTool.DATA_CENTER, + existingDomain.getStorageDomainType(), StorageDomainStatus.Active); + + assertGetResult(result); + } + + @Test + public void testGetStorageDomainWithStatusForInvalidPool() { + StorageDomain result = dao.getStorageDomain(Guid.newGuid(), + existingDomain.getStorageDomainType(), existingDomain.getStatus()); + + assertNull(result); + } + + @Test + public void testGetStorageDomainWithCorrectStatus() { + StorageDomain result = dao.getStorageDomain(FixturesTool.STORAGE_POOL_NFS_INACTIVE_ISO, + StorageDomainType.ISO, StorageDomainStatus.Inactive); + + assertNotNull(result); + assertEquals(FixturesTool.STORAGE_DOMAIN_NFS_INACTIVE_ISO, result.getId()); + } + + @Test + public void testGetStorageDomainWithWrongStatus() { + StorageDomain result = dao.getStorageDomain(FixturesTool.STORAGE_POOL_NFS_INACTIVE_ISO, + StorageDomainType.ISO, StorageDomainStatus.Active); + + assertNull(result); + } + + @Test + public void testGetStorageDomainWithNoStatus() { + StorageDomain result = dao.getStorageDomain(FixturesTool.STORAGE_POOL_NFS_INACTIVE_ISO, + StorageDomainType.ISO, null); + + assertNotNull(result); + assertEquals(FixturesTool.STORAGE_DOMAIN_NFS_INACTIVE_ISO, result.getId()); + } + + @Test + public void testGetStorageDomainsWithAndWithoutStatusAreEqual() { + StorageDomain resultWithoutStatus = dao.getStorageDomain(FixturesTool.STORAGE_POOL_NFS_INACTIVE_ISO, + StorageDomainType.ISO); + StorageDomain resultWithStatus = dao.getStorageDomain(FixturesTool.STORAGE_POOL_NFS_INACTIVE_ISO, + StorageDomainType.ISO, null); + + assertNotNull(resultWithoutStatus); + assertNotNull(resultWithStatus); + assertEquals(resultWithoutStatus, resultWithStatus); + } + /** * Ensures that nothing is returned when the id is invalid. */ diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StoragePoolDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StoragePoolDAOTest.java index c9a1371..be42a8c 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StoragePoolDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StoragePoolDAOTest.java @@ -151,7 +151,7 @@ public void testGetAllByStatus() { List<StoragePool> result = dao.getAllByStatus(StoragePoolStatus.Up); assertNotNull("list of returned pools in status up shouldn't be null", result); - assertEquals("wrong number of storage pools returned for up status", 6, result.size()); + assertEquals("wrong number of storage pools returned for up status", 7, result.size()); result = dao.getAllByStatus(StoragePoolStatus.Maintenance); assertNotNull("list of returned pools in maintenance status shouldn't be null", result); diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index 16cf011..1814077 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -46,6 +46,73 @@ </row> </table> + <table name="mac_pools"> + <column>id</column> + <column>name</column> + <column>description</column> + <column>allow_duplicate_mac_addresses</column> + <column>default_pool</column> + <row> + <value>8c3a60e9-6a66-40db-84e0-c74077991775</value> + <value>Default</value> + <value>Default MAC pool</value> + <value>false</value> + <value>true</value> + </row> + <row> + <value>c248552d-64d4-4a77-ab1d-4c5eea00be6b</value> + <value>two range pool</value> + <value>pool with two ranges</value> + <value>false</value> + <value>false</value> + </row> + <row> + <value>17baf4e3-4347-4f81-915f-7762a108b81a</value> + <value>not used pool</value> + <value>not used</value> + <value>false</value> + <value>false</value> + </row> + <row> + <value>17baf4e3-4347-4f81-915f-7762a108b81b</value> + <value>Pool with a single inactive ISO domain</value> + <value>not used</value> + <value>false</value> + <value>false</value> + </row> + </table> + + <table name="mac_pool_ranges"> + <column>mac_pool_id</column> + <column>from_mac</column> + <column>to_mac</column> + <row> + <value>17baf4e3-4347-4f81-915f-7762a108b81a</value> + <value>00:C0:81:21:71:17</value> + <value>00:C1:81:21:71:17</value> + </row> + <row> + <value>8c3a60e9-6a66-40db-84e0-c74077991775</value> + <value>00:C0:81:21:71:17</value> + <value>00:C1:81:21:71:17</value> + </row> + <row> + <value>c248552d-64d4-4a77-ab1d-4c5eea00be6b</value> + <value>00:C0:81:21:71:17</value> + <value>00:C1:81:21:71:17</value> + </row> + <row> + <value>c248552d-64d4-4a77-ab1d-4c5eea00be6b</value> + <value>02:C0:81:21:71:17</value> + <value>02:C1:81:21:71:17</value> + </row> + <row> + <value>17baf4e3-4347-4f81-915f-7762a108b81b</value> + <value>02:C0:81:21:71:17</value> + <value>02:C1:81:21:71:17</value> + </row> + </table> + <table name="command_entities"> <column>command_id</column> <column>command_type</column> @@ -167,6 +234,21 @@ <value></value> <value></value> <value>1</value> + <value></value> + <value>nfs</value> + <value>auto</value> + <value>42</value> + <value>7</value> + </row> + <row> + <value>0cc146e8-e5ed-482c-8814-270bc48c2982</value> + <value>10.35.64.25:/export/nfs2</value> + <null /> + <null /> + <null /> + <value></value> + <value></value> + <value>2</value> <value></value> <value>nfs</value> <value>auto</value> @@ -521,6 +603,19 @@ <value>2.3</value> <value>2010-10-21 03:38:22</value> <value>2010-11-29 15:57:10</value> + </row> + <row> + <value>6d849ebf-755f-4552-ad09-9a090cda105c</value> + <value>rhel6.iscsi0</value> + <value>Pool with a single inactive ISO domain</value> + <value>false</value> + <value>1</value> + <value>1127</value> + <value>787c5473-9a82-4191-930b-814db3451531</value> + <value>2.3</value> + <value>2014-10-14 16:23:00</value> + <value>2014-10-14 16:23:00</value> + <value>17baf4e3-4347-4f81-915f-7762a108b81b</value> </row> <row> <value>6d849ebf-755f-4552-ad09-9a090cda105e</value> @@ -3866,6 +3961,17 @@ <column>last_time_used_as_master</column> <column>storage_description</column> <row> + <value>72e3a666-89e1-4005-a7ca-f7548004a9aa</value> + <value>0cc146e8-e5ed-482c-8814-270bc48c2982</value> + <value>scale_sd4</value> + <value>2</value> + <value>1</value> + <value>2014-10-14 16:33:00</value> + <value>2014-10-14 16:33:00</value> + <value>5</value> + <value>description0</value> + </row> + <row> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value> <value>scale_sd5</value> @@ -3982,6 +4088,12 @@ <column>available_disk_size</column> <column>used_disk_size</column> <column>_update_date</column> + <row> + <value>72e3a666-89e1-4005-a7ca-f7548004a9aa</value> + <value>196</value> + <value>3</value> + <null /> + </row> <row> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> <value>196</value> @@ -4123,6 +4235,11 @@ <value>386bffd1-e7ed-4b08-bce9-d7df10f8c9a0</value> <value>3</value> </row> + <row> + <value>72e3a666-89e1-4005-a7ca-f7548004a9aa</value> + <value>6d849ebf-755f-4552-ad09-9a090cda105c</value> + <value>4</value> + </row> </table> <table name="snapshots"> diff --git a/packaging/dbscripts/storages_sp.sql b/packaging/dbscripts/storages_sp.sql index 80df390..30d2307 100644 --- a/packaging/dbscripts/storages_sp.sql +++ b/packaging/dbscripts/storages_sp.sql @@ -586,14 +586,15 @@ LANGUAGE plpgsql; -Create or replace FUNCTION Getstorage_domain_by_type_and_storagePoolId(v_storage_domain_type INTEGER, v_storage_pool_id UUID) +Create or replace FUNCTION Getstorage_domain_by_type_storagePoolId_and_status(v_storage_domain_type INTEGER, v_storage_pool_id UUID, v_status INTEGER) RETURNS SETOF storage_domains STABLE AS $procedure$ BEGIN RETURN QUERY SELECT * FROM storage_domains WHERE storage_pool_id = v_storage_pool_id - AND storage_domain_type = v_storage_domain_type; + AND storage_domain_type = v_storage_domain_type + AND (v_status IS NULL OR status = v_status); END; $procedure$ LANGUAGE plpgsql; -- To view, visit http://gerrit.ovirt.org/34866 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I784be2510e2f51be277f7ee06a5bd5573ab23d66 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Idan Shaby <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
