Sahina Bose has uploaded a new change for review. Change subject: engine: Validate change to gluster network ......................................................................
engine: Validate change to gluster network Added validations for Manage networks to prevent gluster network role from being detached/unset when used by bricks in cluster Change-Id: I57398b39783dbdc5ae9f79e7d32794f416c23116 Bug-Url: https://bugzilla.redhat.com/1049994 Signed-off-by: Sahina Bose <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterBrickEntity.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties M packaging/dbscripts/create_views.sql M packaging/dbscripts/gluster_volumes_sp.sql 16 files changed, 97 insertions(+), 13 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/46/40146/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java index 5d0750d..acb54a7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVdsCommand.java @@ -29,7 +29,6 @@ import org.ovirt.engine.core.dao.VdsDynamicDAO; import org.ovirt.engine.core.dao.VdsStaticDAO; import org.ovirt.engine.core.dao.VdsStatisticsDAO; -import org.ovirt.engine.core.dao.gluster.GlusterBrickDao; import org.ovirt.engine.core.utils.lock.EngineLock; import org.ovirt.engine.core.utils.transaction.TransactionMethod; import org.ovirt.engine.core.utils.transaction.TransactionSupport; @@ -198,10 +197,6 @@ private boolean isGlusterEnabled() { return (getVdsGroup().supportsGlusterService()); - } - - protected GlusterBrickDao getGlusterBrickDao() { - return getDbFacade().getGlusterBrickDao(); } private boolean hasVolumeBricksOnServer() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterCommandBase.java index 8aa5985..ca4ac4b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterCommandBase.java @@ -31,7 +31,6 @@ import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.VdsStaticDAO; -import org.ovirt.engine.core.dao.gluster.GlusterBrickDao; import org.ovirt.engine.core.dao.network.InterfaceDao; import org.ovirt.engine.core.dao.network.NetworkDao; @@ -228,10 +227,6 @@ public VdsStaticDAO getVdsStaticDao() { return getDbFacade().getVdsStaticDao(); - } - - protected GlusterBrickDao getGlusterBrickDao() { - return getDbFacade().getGlusterBrickDao(); } protected InterfaceDao getInterfaceDAO() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java index b41f760..d54cc11 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java @@ -56,7 +56,8 @@ new DetachNetworkValidator(getNetwork(), getParameters().getNetworkCluster()); return validate(validator.notManagementNetwork()) && validate(validator.clusterNetworkNotUsedByVms()) - && validate(validator.clusterNetworkNotUsedByTemplates()); + && validate(validator.clusterNetworkNotUsedByTemplates()) + && validate(validator.clusterNetworkNotUsedByBricks()); } @Override @@ -128,5 +129,11 @@ } return networkNotUsed(templatesUsingNetwork, VdcBllMessages.VAR__ENTITIES__VM_TEMPLATES); } + + public ValidationResult clusterNetworkNotUsedByBricks() { + return networkNotUsed(getGlusterBrickDao().getAllByClusterAndNetworkId(networkCluster.getClusterId(), + network.getId()), + VdcBllMessages.VAR__ENTITIES__GLUSTER_BRICKS); + } } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java index bcafb22..03555ee 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java @@ -83,4 +83,5 @@ String.format(NETWORK_NAME_REPLACEMENT, networkName)) : ValidationResult.VALID; } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java index 4be1b6c..28b2a41 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java @@ -11,6 +11,7 @@ import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.NetworkClusterParameters; import org.ovirt.engine.core.common.businessentities.ActionGroup; +import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.errors.VdcBllMessages; @@ -115,6 +116,7 @@ return (!NetworkUtils.isManagementNetwork(getNetwork()) || validate(validator.managementNetworkAttachment(getNetworkName()))) && validate(validator.migrationPropertySupported(getNetworkName())) + && validate(glusterNetworkInUseAndUnset(getVdsGroup())) && (!getNetwork().isExternal() || validateExternalNetwork(validator)); } @@ -128,6 +130,17 @@ new ValidationResult(VdcBllMessages.NETWORK_NOT_EXISTS_IN_CURRENT_CLUSTER) : ValidationResult.VALID; } + public ValidationResult glusterNetworkInUseAndUnset(VDSGroup cluster) { + return ValidationResult.failWith(VdcBllMessages.ACTION_TYPE_FAILED_GLUSTER_NETWORK_INUSE). + when(cluster.supportsGlusterService() && oldNetworkCluster.isGluster() && !getNetworkCluster().isGluster() + && isGlusterNetworkInUse()); + } + + private boolean isGlusterNetworkInUse() { + return !getGlusterBrickDao().getAllByClusterAndNetworkId(getOldNetworkCluster().getClusterId(), + getOldNetworkCluster().getNetworkId()).isEmpty(); + } + @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.NETWORK_UPDTAE_NETWORK_ON_CLUSTER diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterBrickEntity.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterBrickEntity.java index c3c037b..b87dfd2 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterBrickEntity.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterBrickEntity.java @@ -5,6 +5,7 @@ import org.ovirt.engine.core.common.asynctasks.gluster.GlusterAsyncTask; import org.ovirt.engine.core.common.businessentities.BusinessEntityWithStatus; import org.ovirt.engine.core.common.businessentities.IVdcQueryable; +import org.ovirt.engine.core.common.businessentities.Nameable; import org.ovirt.engine.core.common.utils.ObjectUtils; import org.ovirt.engine.core.common.validation.group.CreateEntity; import org.ovirt.engine.core.common.validation.group.gluster.AddBrick; @@ -20,7 +21,7 @@ * @see GlusterVolumeEntity * @see GlusterBrickStatus */ -public class GlusterBrickEntity extends IVdcQueryable implements BusinessEntityWithStatus<Guid, GlusterStatus>, GlusterTaskSupport { +public class GlusterBrickEntity extends IVdcQueryable implements BusinessEntityWithStatus<Guid, GlusterStatus>, GlusterTaskSupport, Nameable { private static final long serialVersionUID = 7119439284741452278L; @NotNull(message = "VALIDATION.GLUSTER.BRICK.ID.NOT_NULL", groups = { RemoveBrick.class }) @@ -237,4 +238,9 @@ this.volumeName = volumeName; } + @Override + public String getName() { + return getQualifiedName(); + } + } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index e99307f..89d412b 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -7,6 +7,9 @@ VAR__ENTITIES__HOSTS, VAR__TYPE__VM, VAR__ENTITIES__VMS, + VAR__ENTITIES__VM, + VAR__ENTITIES__GLUSTER_BRICKS, + VAR__ENTITIES__GLUSTER_BRICK, VAR__TYPE__QUOTA, VAR__TYPE__VM__CLUSTER, VAR__TYPE__VM_TEMPLATE, @@ -569,6 +572,7 @@ ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED(ErrorType.NOT_SUPPORTED), ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_GLUSTER_NETWORK_INUSE(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_NETWORK_ADDRESS_CANNOT_BE_CHANGED(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_EXTERNAL_NETWORK_ALREADY_EXISTS(ErrorType.CONFLICT), ACTION_TYPE_FAILED_EXTERNAL_NETWORK_DETAILS_CANNOT_BE_EDITED(ErrorType.NOT_SUPPORTED), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java index 099b849..0c7499f 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java @@ -43,6 +43,7 @@ import org.ovirt.engine.core.dao.VmStaticDAO; import org.ovirt.engine.core.dao.VmStatisticsDAO; import org.ovirt.engine.core.dao.VmTemplateDAO; +import org.ovirt.engine.core.dao.gluster.GlusterBrickDao; import org.ovirt.engine.core.dao.gluster.GlusterHooksDao; import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao; import org.ovirt.engine.core.dao.network.NetworkClusterDao; @@ -566,6 +567,10 @@ return getDbFacade().getGlusterHooksDao(); } + public GlusterBrickDao getGlusterBrickDao() { + return getDbFacade().getGlusterBrickDao(); + } + public StorageDomainDAO getStorageDomainDAO() { return getDbFacade().getStorageDomainDao(); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java index a804aca..26dfb9e 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDao.java @@ -64,4 +64,6 @@ public void updateBrickProperties(List<GlusterBrickEntity> bricks); public void updateBrickNetworkId(Guid brickId, Guid networkId); + + public List<GlusterBrickEntity> getAllByClusterAndNetworkId(Guid clusterId, Guid networkId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java index 20b0676..dc03889 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoDbFacadeImpl.java @@ -186,6 +186,15 @@ } @Override + public List<GlusterBrickEntity> getAllByClusterAndNetworkId(Guid clusterId, Guid networkId) { + return getCallsHandler().executeReadList("GetBricksByClusterIdAndNetworkId", + brickRowMapper, + getCustomMapSqlParameterSource() + .addValue("cluster_id", clusterId) + .addValue("network_id", networkId)); + } + + @Override protected MapSqlParameterSource createFullParametersMapper(GlusterBrickEntity brick) { return createBrickParams(brick); } diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index 4c8bd22..793dfac 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -284,6 +284,9 @@ VAR__TYPE__PROVIDER_CERTIFICATE=$type provider certificate VAR__TYPE__VM=$type VM VAR__ENTITIES__VMS=$entities virtual machines +VAR__ENTITIES__VM=$entities virtual machine +VAR__ENTITIES__GLUSTER_BRICKS=$entities gluster bricks +VAR__ENTITIES__GLUSTER_BRICK=$entities gluster brick VAR__TYPE__QUOTA=$type Quota VAR__TYPE__COMPUTER_ACCOUNT=$type Computer Account VAR__TYPE__VM_TEMPLATE=$type Template @@ -630,6 +633,7 @@ VM_CANNOT_MOVE_TO_CLUSTER_IN_OTHER_STORAGE_POOL=VM can be moved only to a Cluster in the same Data Center. VM_CLUSTER_IS_NOT_VALID=Cannot ${action} ${type}. Cluster ID is not valid. NETWORK_CANNOT_REMOVE_MANAGEMENT_NETWORK=The Management Network ('${NetworkName}') is mandatory and cannot be removed. +ACTION_TYPE_FAILED_GLUSTER_NETWORK_INUSE==Cannot ${action} ${type}. Unsetting gluster network property is not allowed when it is used by gluster bricks on volumes. The gluster volumes will need to be removed to change this. NETWORK_CANNOT_REMOVE_ISCSI_BOND_NETWORK=The Network ('${NetworkName}') could not be removed since several iSCSI bonds (${IscsiBonds_COUNTER}) are using this network:\n ${IscsiBonds}.\nPlease remove the network first from those iSCSI bon NETWORK_OLD_NETWORK_NOT_SPECIFIED=Previous network name is required. ACTION_TYPE_FAILED_DETECTED_ACTIVE_VMS=Cannot ${action} ${type}. Active VMs were detected.\n\ diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java index b2afc20..aceb334 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/GlusterBrickDaoTest.java @@ -406,5 +406,19 @@ existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertNotNull(existingBrick); assertEquals(FixturesTool.NETWORK_ENGINE, existingBrick.getNetworkId()); + + List<GlusterBrickEntity> bricks = + dao.getAllByClusterAndNetworkId(FixturesTool.GLUSTER_CLUSTER_ID, FixturesTool.NETWORK_ENGINE); + assertNotNull(bricks); + } + + @Test + public void testGetAllByClusterAndNetworkId() { + dao.updateBrickNetworkId(FixturesTool.GLUSTER_BRICK_UUID1, FixturesTool.NETWORK_ENGINE); + List<GlusterBrickEntity> bricks = + dao.getAllByClusterAndNetworkId(FixturesTool.GLUSTER_CLUSTER_ID, FixturesTool.NETWORK_ENGINE); + assertNotNull(bricks); + assertEquals(1, bricks.size()); + assertEquals(FixturesTool.GLUSTER_BRICK_UUID1, bricks.get(0).getId()); } } diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java index b2b7a58..59b0e43 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java @@ -769,6 +769,15 @@ @DefaultStringValue("$entities virtual machines") String VAR__ENTITIES__VMS(); + @DefaultStringValue("$entities virtual machine") + String VAR__ENTITIES__VM(); + + @DefaultStringValue("$entities gluster bricks") + String VAR__ENTITIES__GLUSTER_BRICKS(); + + @DefaultStringValue("$entities gluster brick") + String VAR__ENTITIES__GLUSTER_BRICK(); + @DefaultStringValue("$type Quota") String VAR__TYPE__QUOTA(); @@ -1735,6 +1744,9 @@ @DefaultStringValue("The Management Network ('${NetworkName}') is mandatory and cannot be removed.") String NETWORK_CANNOT_REMOVE_MANAGEMENT_NETWORK(); + @DefaultStringValue("Cannot ${action} ${type}. Unsetting gluster network property is not allowed when it is used by gluster bricks on volumes. The gluster volumes will need to be removed to change this.") + String ACTION_TYPE_FAILED_GLUSTER_NETWORK_INUSE(); + @DefaultStringValue("The Network ('${NetworkName}') could not be removed since several iSCSI bonds (${IscsiBonds_COUNTER}) are using this network:\n ${IscsiBonds}.\nPlease remove the network first from those iSCSI bonds, and try again.") String NETWORK_CANNOT_REMOVE_ISCSI_BOND_NETWORK(); diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index fdf6fc8..b4071be 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -282,6 +282,9 @@ VAR__TYPE__PROVIDER_CERTIFICATE=$type provider certificate VAR__TYPE__VM=$type VM VAR__ENTITIES__VMS=$entities virtual machines +VAR__ENTITIES__VM=$entities virtual machine +VAR__ENTITIES__GLUSTER_BRICKS=$entities gluster bricks +VAR__ENTITIES__GLUSTER_BRICK=$entities gluster brick VAR__TYPE__QUOTA=$type Quota VAR__TYPE__COMPUTER_ACCOUNT=$type Computer Account VAR__TYPE__VM_TEMPLATE=$type Template diff --git a/packaging/dbscripts/create_views.sql b/packaging/dbscripts/create_views.sql index 00be84d..28e1605 100644 --- a/packaging/dbscripts/create_views.sql +++ b/packaging/dbscripts/create_views.sql @@ -1742,7 +1742,8 @@ SELECT gluster_volume_bricks.*, vds_static.host_name AS vds_name, gluster_volumes.vol_name AS volume_name, - vds_interface.addr as interface_address + vds_interface.addr as interface_address, + gluster_volumes.cluster_id as cluster_id FROM gluster_volume_bricks INNER JOIN vds_static ON vds_static.vds_id = gluster_volume_bricks.server_id INNER JOIN gluster_volumes ON gluster_volumes.id = gluster_volume_bricks.volume_id diff --git a/packaging/dbscripts/gluster_volumes_sp.sql b/packaging/dbscripts/gluster_volumes_sp.sql index d3ca9a5..e52e1fc 100644 --- a/packaging/dbscripts/gluster_volumes_sp.sql +++ b/packaging/dbscripts/gluster_volumes_sp.sql @@ -624,3 +624,16 @@ WHERE id = v_volume_id; END; $procedure$ LANGUAGE plpgsql; + + +Create or replace FUNCTION GetBricksByClusterIdAndNetworkId(v_cluster_id UUID, + v_network_id UUID) +RETURNS SETOF gluster_volume_bricks_view STABLE + AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM gluster_volume_bricks_view + WHERE network_id = v_network_id + AND cluster_id = v_cluster_id; +END; $procedure$ +LANGUAGE plpgsql; -- To view, visit https://gerrit.ovirt.org/40146 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I57398b39783dbdc5ae9f79e7d32794f416c23116 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5-gluster Gerrit-Owner: Sahina Bose <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
