ofri masad has uploaded a new change for review. Change subject: [WIP] core: Add vnic profiles to DB and entities ......................................................................
[WIP] core: Add vnic profiles to DB and entities Add vnic profiles to the DB and create the business entities. see: http://wiki.ovirt.org/Features/Design/Network_QoS Change-Id: Id0525a6d30995fe896499fed283638b93cae5e41 Bug-Url: https://bugzilla.redhat.com/514420 Signed-off-by: Ofri Masad <[email protected]> --- M backend/manager/dbscripts/create_tables.sql M backend/manager/dbscripts/create_views.sql M backend/manager/dbscripts/network_sp.sql A backend/manager/dbscripts/upgrade/03_03_0200_add_profile_to_network_interface A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/VmNetworkInterfaceProfile.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDao.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDaoImpl.java A backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDaoTest.java 9 files changed, 337 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/15992/1 diff --git a/backend/manager/dbscripts/create_tables.sql b/backend/manager/dbscripts/create_tables.sql index ae82de7..aabe032 100644 --- a/backend/manager/dbscripts/create_tables.sql +++ b/backend/manager/dbscripts/create_tables.sql @@ -1144,6 +1144,21 @@ WITH OIDS; -- ---------------------------------------------------------------------- +-- table vnic_profiles +-- ---------------------------------------------------------------------- + + +CREATE TABLE vnic_profiles +( + id UUID NOT NULL, + profile_name VARCHAR(50) NOT NULL, + network_id UUID NOT NULL, + network_name VARCHAR(50) NOT NULL, + port_mirroring BOOLEAN NOT NULL, + custom_properties TEXT, + CONSTRAINT PK_id PRIMARY KEY (id), +) WITH OIDS; +-- ---------------------------------------------------------------------- -- Foreign key constraints -- ---------------------------------------------------------------------- ALTER TABLE tags_user_group_map ADD CONSTRAINT tags_user_group_map_tag @@ -1331,6 +1346,13 @@ ALTER TABLE permissions ADD CONSTRAINT fk_permissions_roles FOREIGN KEY(role_id) REFERENCES roles(id) ON DELETE CASCADE; +ALTER TABLE vnic_profiles ADD CONSTRAINT FK_vnic_profiles_network_id FOREIGN KEY(network_id) +REFERENCES network(id) ON DELETE SET NULL; + +ALTER TABLE vnic_profiles ADD CONSTRAINT FK_vnic_profiles_network_name FOREIGN KEY(network_name) +REFERENCES network(name); + + CREATE INDEX IDX_permissions_ad_element_id ON permissions (ad_element_id); diff --git a/backend/manager/dbscripts/create_views.sql b/backend/manager/dbscripts/create_views.sql index 39bd405..c64d47b 100644 --- a/backend/manager/dbscripts/create_views.sql +++ b/backend/manager/dbscripts/create_views.sql @@ -1112,6 +1112,15 @@ FROM network INNER JOIN storage_pool ON network.storage_pool_id = storage_pool.id; +CREATE OR REPLACE VIEW vm_interface_profile_view +AS +SELECT vnic_profiles.id AS id, + vnic_profiles.profile_name AS profile_name, + vnic_profiles.network_id AS network_id, + vnic_profiles.network_name AS network_name, + vnic_profiles.port_mirroring AS port_mirroring, + vnic_profiles.custom_properties AS custom_properties, +FROM vnic_profiles; ---------------------------------------------- -- Query Permissions ---------------------------------------------- diff --git a/backend/manager/dbscripts/network_sp.sql b/backend/manager/dbscripts/network_sp.sql index ee2c3db..34b3b43 100644 --- a/backend/manager/dbscripts/network_sp.sql +++ b/backend/manager/dbscripts/network_sp.sql @@ -972,3 +972,95 @@ END; $procedure$ LANGUAGE plpgsql; + +---------------------------------------------------------------------- +-- VNIC interface +---------------------------------------------------------------------- + +Create or replace FUNCTION Get_vm_interface_profile_by_id(v_id UUID) +RETURNS vnic_profiles + AS $procedure$ +BEGIN + + RETURN QUERY SELECT * + FROM vnic_profiles + WHERE id = v_id; + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION Insert_vm_interface_profile(v_id UUID, + v_profile_name VARCHAR(50), + v_network_id UUID, + v_network_name VARCHAR(50), + v_port_mirroring BOOLEAN, + v_custom_properties TEXT) +RETURNS VOID + AS $procedure$ +BEGIN + + INSERT INTO vnic_profiles(id, profile_name, network_id, network_name, port_mirroring, custom_properties) + VALUES(v_id, v_profile_name, v_network_id, v_network_name, v_port_mirroring, v_custom_properties); + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION Update_vm_interface_profile(v_id UUID, + v_profile_name VARCHAR(50), + v_network_id UUID, + v_network_name VARCHAR(50), + v_port_mirroring BOOLEAN, + v_custom_properties TEXT) +RETURNS VOID + AS $procedure$ +BEGIN + + UPDATE vnic_profiles + SET id = v_id, profile_name = v_profile_name, network_id = v_network_id, network_name = v_network_name, + port_mirroring = v_port_mirroring, custom_properties = v_custom_properties + WHERE id = v_id; + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION Delete_vm_interface_profile(v_id UUID) +RETURNS VOID + AS $procedure$ +BEGIN + + DELETE FROM vnic_profiles + WHERE id = v_id; + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION Get_all_vm_interface_profiles() +RETURNS SETOF vnic_profiles + AS $procedure$ +BEGIN + + RETURN QUERY SELECT * + FROM vnic_profiles; + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION Get_all_vm_interfaces_profiles_by_network_id(v_network_id) +RETURNS SETOF vnic_profiles + AS $procedure$ +BEGIN + + RETURN QUERY SELECT * + FROM vnic_profiles + WHERE network_id = v_network_id; + +END; $procedure$ +LANGUAGE plpgsql; + + + diff --git a/backend/manager/dbscripts/upgrade/03_03_0200_add_profile_to_network_interface b/backend/manager/dbscripts/upgrade/03_03_0200_add_profile_to_network_interface new file mode 100644 index 0000000..ff4682a --- /dev/null +++ b/backend/manager/dbscripts/upgrade/03_03_0200_add_profile_to_network_interface @@ -0,0 +1,9 @@ +--Add vnic_profile id and name into vm_interface +SELECT fn_db_add_column('vm_interface', 'vnic_profile_id', 'UUID NOT NULL'); +SELECT fn_db_add_column('vm_interface', 'vnic_profile_name', 'VARCHAR(50) NOT NULL'); + +ALTER TABLE vm_interface ADD CONSTRAINT FK_vm_interface_vnic_profile_id FOREIGN KEY(vnic_profile_id) +REFERENCES vnic_profiles(id); + +ALTER TABLE vm_interface ADD CONSTRAINT FK_vm_interface_vnic_profile_name FOREIGN KEY(vnic_profile_name) +REFERENCES vnic_profiles(profile_name); \ No newline at end of file diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/VmNetworkInterfaceProfile.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/VmNetworkInterfaceProfile.java new file mode 100644 index 0000000..c9036ba --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/VmNetworkInterfaceProfile.java @@ -0,0 +1,79 @@ +package org.ovirt.engine.core.common.businessentities.network; + +import org.ovirt.engine.core.common.businessentities.BusinessEntity; +import org.ovirt.engine.core.common.businessentities.IVdcQueryable; +import org.ovirt.engine.core.common.businessentities.Nameable; +import org.ovirt.engine.core.compat.Guid; + +import java.io.Serializable; + +public class VmNetworkInterfaceProfile extends IVdcQueryable implements Serializable, BusinessEntity<Guid>, Nameable { + + private String name; + private Guid id; + private Network network; + private Guid networkId; + private String networkName; + private boolean portMirroringEnabled; + private String customProperties; + + + @Override + public Guid getId() { + return id; + } + + @Override + public void setId(Guid id) { + this.id = id; + } + + @Override + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isPortMirroringEnabled() { + return portMirroringEnabled; + } + + public void setPortMirroringEnabled(boolean portMirroringEnabled) { + this.portMirroringEnabled = portMirroringEnabled; + } + + public String getCustomProperties() { + return customProperties; + } + + public void setCustomProperties(String customProperties) { + this.customProperties = customProperties; + } + + public Network getNetwork() { + return network; + } + + public void setNetwork(Network network) { + this.network = network; + } + + public Guid getNetworkId() { + return networkId; + } + + public void setNetworkId(Guid networkId) { + this.networkId = networkId; + } + + public String getNetworkName() { + return networkName; + } + + public void setNetworkName(String networkName) { + this.networkName = networkName; + } +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java index 7614be3..5038831 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java @@ -106,8 +106,10 @@ import org.ovirt.engine.core.dao.network.InterfaceDao; import org.ovirt.engine.core.dao.network.NetworkClusterDao; import org.ovirt.engine.core.dao.network.NetworkDao; +import org.ovirt.engine.core.dao.network.NetworkQoSDao; import org.ovirt.engine.core.dao.network.NetworkViewDao; import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao; +import org.ovirt.engine.core.dao.network.VmNetworkInterfaceProfileDao; import org.ovirt.engine.core.dao.network.VmNetworkStatisticsDao; import org.ovirt.engine.core.dao.provider.ProviderDao; import org.ovirt.engine.core.utils.linq.LinqUtils; @@ -964,4 +966,22 @@ public VmGuestAgentInterfaceDao getVmGuestAgentInterfaceDao() { return getDao(VmGuestAgentInterfaceDao.class); } + + /** + * Returns the singleton instance of {@link NetworkQoSDao}. + * + * @return the dao + */ + public NetworkQoSDao getNetworkQoSDao() { + return getDao(NetworkQoSDao.class); + } + + /** + * Returns the singleton instance of {@link VmNetworkInterfaceProfileDao}. + * + * @return the dao + */ + public VmNetworkInterfaceProfileDao getVmNetworkInterfaceProfileDao() { + return getDao(VmNetworkInterfaceProfileDao.class); + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDao.java new file mode 100644 index 0000000..386e27d --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDao.java @@ -0,0 +1,13 @@ +package org.ovirt.engine.core.dao.network; + +import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterfaceProfile; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.GenericDao; + +import java.util.List; + +public interface VmNetworkInterfaceProfileDao extends GenericDao<VmNetworkInterfaceProfile, Guid> { + + List<VmNetworkInterfaceProfile> getAllForNetwork(Guid networkId); + +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDaoImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDaoImpl.java new file mode 100644 index 0000000..f4f97b5 --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDaoImpl.java @@ -0,0 +1,86 @@ +package org.ovirt.engine.core.dao.network; + +import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterfaceProfile; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.BaseDAODbFacade; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + + +public class VmNetworkInterfaceProfileDaoImpl extends BaseDAODbFacade implements VmNetworkInterfaceProfileDao { + + protected final RowMapper<VmNetworkInterfaceProfile> mapper = + new RowMapper<VmNetworkInterfaceProfile>() { + @Override + public VmNetworkInterfaceProfile mapRow(ResultSet rs, int rowNum) + throws SQLException { + VmNetworkInterfaceProfile entity = new VmNetworkInterfaceProfile(); + entity.setId(Guid.createGuidFromString(rs.getString("id"))); + entity.setName(rs.getString("profile_name")); + entity.setNetworkId(Guid.createGuidFromString(rs.getString("network_id"))); + entity.setNetworkName(rs.getString("network_name")); + entity.setCustomProperties(rs.getString("custom_properties")); + entity.setPortMirroringEnabled(rs.getBoolean("is_plugged")); + return entity; + } + }; + + + @Override + public VmNetworkInterfaceProfile get(Guid id) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("id", id); + return getCallsHandler().executeRead("Get_vm_interface_profile_by_id", mapper, parameterSource);//TODO + } + + @Override + public void save(VmNetworkInterfaceProfile profile) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("id", profile.getId()) + .addValue("name", profile.getName()) + .addValue("network_name", profile.getNetworkName()) + .addValue("network_id", profile.getNetworkId()) + .addValue("port_mirroring", profile.isPortMirroringEnabled()) + .addValue("custom_properties", profile.getCustomProperties()); + + getCallsHandler().executeModification("Insert_vm_interface_profile", parameterSource); //TODO + + } + + @Override + public void update(VmNetworkInterfaceProfile profile) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("id", profile.getId()) + .addValue("name", profile.getName()) + .addValue("network_name", profile.getNetworkName()) + .addValue("network_id", profile.getNetworkId()) + .addValue("port_mirroring", profile.isPortMirroringEnabled()) + .addValue("custom_properties", profile.getCustomProperties()); + + getCallsHandler().executeModification("Update_vm_interface_profile", parameterSource); //TODO + + } + + @Override + public void remove(Guid id) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("id", id); + + getCallsHandler().executeModification("Delete_vm_interface_profile", parameterSource); //TODO + } + + @Override + public List<VmNetworkInterfaceProfile> getAll() { + return getCallsHandler().executeReadList("Get_all_vm_interface_profiles", mapper, getCustomMapSqlParameterSource()); //TODO + } + + @Override + public List<VmNetworkInterfaceProfile> getAllForNetwork(Guid networkId) { + return getCallsHandler().executeReadList("Get_all_vm_interfaces_profiles_by_network_id", //TODO + mapper, getCustomMapSqlParameterSource().addValue("network_id", networkId)); + } +} diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDaoTest.java new file mode 100644 index 0000000..052bf16 --- /dev/null +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceProfileDaoTest.java @@ -0,0 +1,7 @@ +package org.ovirt.engine.core.dao.network; + +import org.ovirt.engine.core.dao.BaseDAOTestCase; + + +public class VmNetworkInterfaceProfileDaoTest extends BaseDAOTestCase { +} -- To view, visit http://gerrit.ovirt.org/15992 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id0525a6d30995fe896499fed283638b93cae5e41 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: ofri masad <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
