Tal Nisan has uploaded a new change for review. Change subject: core: Added a query to fetch storage types in a storage pool ......................................................................
core: Added a query to fetch storage types in a storage pool Added a query that fetches all the storage types of the data storage domains contained in a certain pool Change-Id: I97447e0fc3e087958101156947bded12c1fb9418 Related-To: https://bugzilla.redhat.com/1085395 Signed-off-by: Tal Nisan <tni...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetStorageTypesInPoolByPoolIdQuery.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StoragePoolDAOTest.java M packaging/dbscripts/storages_sp.sql 6 files changed, 101 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/37/27137/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetStorageTypesInPoolByPoolIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetStorageTypesInPoolByPoolIdQuery.java new file mode 100644 index 0000000..79be60d --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetStorageTypesInPoolByPoolIdQuery.java @@ -0,0 +1,16 @@ +package org.ovirt.engine.core.bll.storage; + +import org.ovirt.engine.core.bll.QueriesCommandBase; +import org.ovirt.engine.core.common.queries.IdQueryParameters; + +public class GetStorageTypesInPoolByPoolIdQuery <P extends IdQueryParameters> extends QueriesCommandBase<P> { + + public GetStorageTypesInPoolByPoolIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + getQueryReturnValue().setReturnValue(getDbFacade().getStoragePoolDao().getStorageTypesInPool(getParameters().getId())); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 8661c07..8815637 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -230,6 +230,7 @@ GetLunsByVgId, GetPermittedStorageDomainsByStoragePoolId(VdcQueryAuthType.User), GetIscsiBondsByStoragePoolId, + GetStorageTypesInPoolByPoolId, // Event Notification GetEventSubscribersBySubscriberIdGrouped, diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAO.java index 9afeb49..213e59b 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAO.java @@ -5,6 +5,7 @@ import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.compat.Guid; /** @@ -130,4 +131,12 @@ */ List<Guid> getDcIdByExternalNetworkId(String externalId); + /** + * Retrieves the storage domain types of the data domains that are existing in the pool. + * + * @param storagePoolId + * the storage pool ID. + * @return the list storage types that are existing in the pool. + */ + List<StorageType> getStorageTypesInPool(Guid storagePoolId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java index 67bb44c..2d49c19 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StoragePoolDAODbFacadeImpl.java @@ -9,6 +9,7 @@ import org.ovirt.engine.core.common.businessentities.StorageFormatType; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; +import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; import org.springframework.jdbc.core.RowMapper; @@ -237,4 +238,18 @@ getCustomMapSqlParameterSource().addValue("external_id", externalId)); } + @Override + public List<StorageType> getStorageTypesInPool(Guid storagePoolId) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("storage_pool_id", storagePoolId); + + return getCallsHandler().executeReadList("GetStorageTypesInPoolByPoolId", storageTypeRowMapper, parameterSource); + } + + private static RowMapper<StorageType> storageTypeRowMapper = new RowMapper<StorageType>() { + @Override + public StorageType mapRow(ResultSet rs, int rowNum) throws SQLException { + return StorageType.forValue(rs.getInt(1)); + } + }; } 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 6d4f43c..6487a74 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 @@ -6,6 +6,8 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.junit.Test; @@ -13,6 +15,7 @@ import org.ovirt.engine.core.common.businessentities.StorageFormatType; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; @@ -316,4 +319,45 @@ assertNotNull(result); assertFalse(result.isEmpty()); } + + @Test + public void testGetStorageTypesInPoolForMixedTypes() { + List<StorageType> expectedTypes = Arrays.asList(); + Guid poolId = FixturesTool.STORAGE_POOL_MIXED_TYPES; + List<StorageType> storageTypes = dao.getStorageTypesInPool(poolId); + assertStorageTypes(storageTypes, StorageType.POSIXFS, StorageType.NFS, StorageType.ISCSI); + } + + @Test + public void testGetStorageTypesInPoolForSingleType() { + List<StorageType> expectedTypes = Arrays.asList(); + Guid poolId = FixturesTool.STORAGE_POOL_NFS; + List<StorageType> storageTypes = dao.getStorageTypesInPool(poolId); + assertStorageTypes(storageTypes, StorageType.NFS); + } + + @Test + public void testGetStorageTypesInPoolForNonExistingPool() { + Guid poolId = Guid.newGuid(); + List<StorageType> storageTypes = dao.getStorageTypesInPool(poolId); + assertTrue("Number of storage types in a non existing pool returned results", storageTypes.isEmpty()); + } + + @Test + public void testGetStorageTypesInPoolForEmptyPool() { + Guid poolId = FixturesTool.STORAGE_POOL_NO_DOMAINS; + List<StorageType> storageTypes = dao.getStorageTypesInPool(poolId); + assertTrue("Number of storage types in a non existing pool returned results", storageTypes.isEmpty()); + } + + private void assertStorageTypes(List<StorageType> typesList, StorageType... expectedTypes) { + assertEquals("Number of storage types different than expected storage type in the pool", typesList.size(), expectedTypes.length); + + List<StorageType> expectedTypesList = new ArrayList<>(Arrays.asList(expectedTypes)); + + expectedTypesList.removeAll(typesList); + + assertTrue(String.format("The following storage types were expected but were missing: %s", expectedTypesList), expectedTypesList.isEmpty()); + + } } diff --git a/packaging/dbscripts/storages_sp.sql b/packaging/dbscripts/storages_sp.sql index 168cb19..6566e25 100644 --- a/packaging/dbscripts/storages_sp.sql +++ b/packaging/dbscripts/storages_sp.sql @@ -711,3 +711,19 @@ WHERE provider_network_external_id = v_external_id; END; $procedure$ LANGUAGE plpgsql; + + + + +-- This SP returns a distinct list of the storage types of the data domains in the pool (ignoring ISO/Export etc.) +Create or replace FUNCTION GetStorageTypesInPoolByPoolId(v_storage_pool_id UUID) +RETURNS SETOF INTEGER STABLE + AS $procedure$ +BEGIN + RETURN QUERY + SELECT DISTINCT storage_type + FROM storage_domains + WHERE storage_pool_id = v_storage_pool_id + AND storage_domain_type IN (0,1); -- 0 = MASTER, 1 = DATA +END; $procedure$ +LANGUAGE plpgsql; -- To view, visit http://gerrit.ovirt.org/27137 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I97447e0fc3e087958101156947bded12c1fb9418 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Tal Nisan <tni...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches