ofri masad has uploaded a new change for review. Change subject: core: Add QoS to to DB and entities ......................................................................
core: Add QoS to to DB and entities Add the QoS entity to the DB and business entities. see: http://wiki.ovirt.org/Features/Design/Network_QoS Change-Id: If39d20b77d06165e4adcc27e6b6dc5458cac93d3 Bug-Url: https://bugzilla.redhat.com/514420 Signed-off-by: Ofri Masad <oma...@redhat.com> --- A backend/manager/dbscripts/network_qos_sp A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/NetworkQoS.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/NetworkQoSDao.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDaoImpl.java M backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties A backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkQosDaoTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml M packaging/dbscripts/create_tables.sql 9 files changed, 519 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/16294/1 diff --git a/backend/manager/dbscripts/network_qos_sp b/backend/manager/dbscripts/network_qos_sp new file mode 100644 index 0000000..9de65a5 --- /dev/null +++ b/backend/manager/dbscripts/network_qos_sp @@ -0,0 +1,79 @@ +---------------------------------------------------------------- +-- [network_qos] Table +---------------------------------------------------------------- + +Create or replace FUNCTION insert_network_qos(v_id uuid, + v_name VARCHAR(50), + v_storage_pool_id uuid, + v_inbound_average INTEGER, + v_inbound_peak INTEGER, + v_inbound_burst INTEGER, + v_outbound_average INTEGER, + v_outbound_peak INTEGER, + v_outbound_burst INTEGER) +RETURNS VOID + AS $procedure$ +BEGIN +INSERT INTO network_qos(id, name, storage_pool_id, inbound_average, inbound_peak, inbound_burst, outbound_average, outbound_peak, outbound_burst) + VALUES(v_id, v_name, v_storage_pool_id, v_inbound_average, v_inbound_peak, v_inbound_burst, v_outbound_average, v_outbound_peak, v_outbound_burst); +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION update_network_qos(v_id uuid, + v_name VARCHAR(50), + v_storage_pool_id uuid, + v_inbound_average INTEGER, + v_inbound_peak INTEGER, + v_inbound_burst INTEGER, + v_outbound_average INTEGER, + v_outbound_peak INTEGER, + v_outbound_burst INTEGER) +RETURNS VOID + AS $procedure$ +BEGIN + UPDATE network_qos + SET name = v_name, storage_pool_id = v_storage_pool_id, inbound_average = v_inbound_average, inbound_peak = v_inbound_peak, inbound_burst = v_inbound_burst, + outbound_average = v_outbound_average, outbound_peak = v_outbound_peak, outbound_burst = v_outbound_burst, _update_date = LOCALTIMESTAMP + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION delete_network_qos(v_id UUID) RETURNS VOID + AS $procedure$ +BEGIN + DELETE FROM network_qos + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; + + + +Create or replace FUNCTION get_all_network_qos() RETURNS SETOF network_qos + AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM network_qos; +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION get_network_qos_by_id(v_id UUID) RETURNS SETOF network_qos + AS $procedure$ +BEGIN +RETURN QUERY SELECT * + FROM network_qos + WHERE id = v_id; +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION get_all_network_qos_for_storage_pool(v_storage_pool_id UUID) RETURNS SETOF network_qos + AS $procedure$ +BEGIN +RETURN QUERY SELECT * + FROM network_qos + WHERE storage_pool_id = v_storage_pool_id; +END; $procedure$ +LANGUAGE plpgsql; \ No newline at end of file diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/NetworkQoS.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/NetworkQoS.java new file mode 100644 index 0000000..73fbf0f --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/NetworkQoS.java @@ -0,0 +1,140 @@ +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.utils.ObjectUtils; +import org.ovirt.engine.core.compat.Guid; + +import java.io.Serializable; + +public class NetworkQoS extends IVdcQueryable implements Serializable, BusinessEntity<Guid> { + + private String name; + private Guid storagePoolId; + private Integer inboundAverage; + private Integer inboundPeak; + private Integer inboundBurst; + private Integer outboundAverage; + private Integer outboundPeak; + private Integer outboundBurst; + + private Guid id; + + + @Override + public Guid getId() { + return id; + } + + @Override + public void setId(Guid id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Guid getStoragePoolId() { + return storagePoolId; + } + + public void setStoragePoolId(Guid storagePoolId) { + this.storagePoolId = storagePoolId; + } + + public Integer getInboundAverage() { + return inboundAverage; + } + + public void setInboundAverage(Integer inboundAverage) { + this.inboundAverage = inboundAverage; + } + + public Integer getInboundPeak() { + return inboundPeak; + } + + public void setInboundPeak(Integer inboundPeak) { + this.inboundPeak = inboundPeak; + } + + public Integer getInboundBurst() { + return inboundBurst; + } + + public void setInboundBurst(Integer inboundBurst) { + this.inboundBurst = inboundBurst; + } + + public Integer getOutboundAverage() { + return outboundAverage; + } + + public void setOutboundAverage(Integer outboundAverage) { + this.outboundAverage = outboundAverage; + } + + public Integer getOutboundPeak() { + return outboundPeak; + } + + public void setOutboundPeak(Integer outboundPeak) { + this.outboundPeak = outboundPeak; + } + + public Integer getOutboundBurst() { + return outboundBurst; + } + + public void setOutboundBurst(Integer outboundBurst) { + this.outboundBurst = outboundBurst; + } + + public boolean equalValues(NetworkQoS other) { + return ObjectUtils.objectsEqual(this.getInboundAverage(), other.getInboundAverage()) + && ObjectUtils.objectsEqual(this.getInboundPeak(), other.getInboundPeak()) + && ObjectUtils.objectsEqual(this.getInboundBurst(), other.getInboundBurst()) + && ObjectUtils.objectsEqual(this.getOutboundAverage(), other.getOutboundAverage()) + && ObjectUtils.objectsEqual(this.getOutboundPeak(), other.getOutboundPeak()) + && ObjectUtils.objectsEqual(this.getOutboundBurst(), other.getOutboundBurst()); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null) { + return false; + } + if (!(o instanceof NetworkQoS)) { + return false; + } + NetworkQoS other = (NetworkQoS) o; + return ObjectUtils.objectsEqual(this.getName(), other.getName()) + && ObjectUtils.objectsEqual(this.getStoragePoolId(), other.getStoragePoolId()) + && equalValues(other); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((storagePoolId == null) ? 0 : storagePoolId.hashCode()); + result = prime * result + ((inboundAverage == null) ? 0 : inboundAverage.hashCode()); + result = prime * result + ((inboundPeak == null) ? 0 : inboundPeak.hashCode()); + result = prime * result + ((inboundBurst == null) ? 0 : inboundBurst.hashCode()); + result = prime * result + ((outboundAverage == null) ? 0 : outboundAverage.hashCode()); + result = prime * result + ((outboundPeak == null) ? 0 : outboundPeak.hashCode()); + result = prime * result + ((outboundBurst == null) ? 0 : outboundBurst.hashCode()); + return result; + } +} 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 5e09d79..87e3897 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 @@ -105,6 +105,7 @@ 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.VmNetworkStatisticsDao; @@ -963,4 +964,8 @@ public VmGuestAgentInterfaceDao getVmGuestAgentInterfaceDao() { return getDao(VmGuestAgentInterfaceDao.class); } + + public NetworkQoSDao getQosDao() { + return getDao(NetworkQoSDao.class); + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDao.java new file mode 100644 index 0000000..ffe0f92 --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDao.java @@ -0,0 +1,12 @@ +package org.ovirt.engine.core.dao.network; + +import org.ovirt.engine.core.common.businessentities.network.NetworkQoS; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.GenericDao; + +import java.util.List; + +public interface NetworkQoSDao extends GenericDao<NetworkQoS, Guid> { + + public List<NetworkQoS> getAllForStoragePoolId(Guid storagePoolId); +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDaoImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDaoImpl.java new file mode 100644 index 0000000..47d07da --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkQoSDaoImpl.java @@ -0,0 +1,91 @@ +package org.ovirt.engine.core.dao.network; + +import org.ovirt.engine.core.common.businessentities.network.NetworkQoS; +import org.ovirt.engine.core.compat.Guid; +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 NetworkQoSDaoImpl extends BaseDAODbFacade implements NetworkQoSDao { + + protected static final RowMapper<NetworkQoS> mapper = + new RowMapper<NetworkQoS>() { + @Override + public NetworkQoS mapRow(ResultSet rs, int rowNum) + throws SQLException { + NetworkQoS entity = new NetworkQoS(); + entity.setId(Guid.createGuidFromString(rs.getString("id"))); + entity.setName(rs.getString("name")); + entity.setStoragePoolId(Guid.createGuidFromString(rs.getString("storage_pool_id"))); + entity.setInboundAverage(rs.getInt("inbound_average")); + entity.setInboundPeak(rs.getInt("inbound_peak")); + entity.setInboundBurst(rs.getInt("inbound_burst")); + entity.setOutboundAverage(rs.getInt("outbound_average")); + entity.setOutboundPeak(rs.getInt("outbound_peak")); + entity.setOutboundBurst(rs.getInt("outbound_burst")); + return entity; + } + }; + + + @Override + public NetworkQoS get(Guid id) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("id", id.getUuid()); + return getCallsHandler().executeRead("Get_network_qos_by_id", mapper, parameterSource); + } + + @Override + public void save(NetworkQoS networkQoS) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("id", networkQoS.getId()) + .addValue("name", networkQoS.getName()) + .addValue("storage_pool_id", networkQoS.getStoragePoolId()) + .addValue("inbound_average", networkQoS.getInboundAverage()) + .addValue("inbound_peak", networkQoS.getInboundPeak()) + .addValue("inbound_burst", networkQoS.getInboundBurst()) + .addValue("outbound_average", networkQoS.getOutboundAverage()) + .addValue("outbound_peak", networkQoS.getOutboundPeak()) + .addValue("outbound_burst", networkQoS.getOutboundBurst()); + + getCallsHandler().executeModification("Insert_network_qos", parameterSource); + } + + @Override + public void update(NetworkQoS networkQoS) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("id", networkQoS.getId()) + .addValue("name", networkQoS.getName()) + .addValue("storage_pool_id", networkQoS.getStoragePoolId()) + .addValue("inbound_average", networkQoS.getInboundAverage()) + .addValue("inbound_peak", networkQoS.getInboundPeak()) + .addValue("inbound_burst", networkQoS.getInboundBurst()) + .addValue("outbound_average", networkQoS.getOutboundAverage()) + .addValue("outbound_peak", networkQoS.getOutboundPeak()) + .addValue("outbound_burst", networkQoS.getOutboundBurst()); + + getCallsHandler().executeModification("Update_network_qos", parameterSource); + } + + @Override + public void remove(Guid id) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("id", id); + + getCallsHandler().executeModification("Delete_network_qos", parameterSource); + } + + @Override + public List<NetworkQoS> getAll() { + return getCallsHandler().executeReadList("Get_all_network_qos", mapper, getCustomMapSqlParameterSource()); + } + + @Override + public List<NetworkQoS> getAllForStoragePoolId(Guid storagePoolId) { + return getCallsHandler().executeReadList("Get_all_network_qos_for_storage_pool", mapper, + getCustomMapSqlParameterSource().addValue("storage_pool_id", storagePoolId)); + } +} diff --git a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties index 29c73d8..163fc2c 100644 --- a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties +++ b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties @@ -63,3 +63,4 @@ GlusterServerServiceDao=org.ovirt.engine.core.dao.gluster.GlusterServerServiceDaoDbFacadeImpl GlusterClusterServiceDao=org.ovirt.engine.core.dao.gluster.GlusterClusterServiceDaoDbFacadeImpl GlusterServerDao=org.ovirt.engine.core.dao.gluster.GlusterServerDaoDbFacadeImpl +NetworkQoSDao=org.ovirt.engine.core.dao.network.NetworkQoSDaoImpl diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkQosDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkQosDaoTest.java new file mode 100644 index 0000000..34be347 --- /dev/null +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkQosDaoTest.java @@ -0,0 +1,123 @@ +package org.ovirt.engine.core.dao.network; + +import org.junit.Test; +import org.ovirt.engine.core.common.businessentities.network.NetworkQoS; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.BaseDAOTestCase; +import org.ovirt.engine.core.dao.FixturesTool; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +public class NetworkQosDaoTest extends BaseDAOTestCase { + + private NetworkQoSDao dao = getDbFacade().getQosDao(); + + private static final Guid qosAId = Guid.createGuidFromString("ae956031-6be2-43d6-bb90-5191c9253314"); + private static final Guid qosBId = Guid.createGuidFromString("ae956031-6be2-43d6-bb90-5191c9253315"); + private static final Guid qosCId = Guid.createGuidFromString("ae956031-6be2-43d6-bb90-5191c9253316"); + private static final Guid qosDId = Guid.createGuidFromString("ae956031-6be2-43d6-bb90-5191c9253317"); + + + /** + * Ensures that retrieving with an invalid ID returns null. + */ + @Test + public void testGetWithInvalidId() { + NetworkQoS result = dao.get(Guid.newGuid()); + + assertNull(result); + } + + /** + * Ensures that retrieving VDS by ID works as expected. + */ + @Test + public void testGetNetworkQos() { + NetworkQoS result = dao.get(qosAId); + NetworkQoS trueA = new NetworkQoS(); + trueA.setId(qosAId); + trueA.setName("qos_a"); + trueA.setStoragePoolId(FixturesTool.STORAGE_POOL_NFS_2); + trueA.setInboundAverage(1000); + trueA.setInboundPeak(2000); + trueA.setInboundBurst(500); + trueA.setOutboundAverage(1000); + trueA.setOutboundPeak(2000); + trueA.setOutboundBurst(500); + + assertNotNull(result); + assertTrue(trueA.equals(result)); + } + + /** + * Test getAll + */ + @Test + public void testGetAllNetworkQos() { + assertTrue(dao.getAll().size() == 3); + } + + /** + * test update + */ + @Test + public void testUpdateNetworkQos() { + NetworkQoS newB = new NetworkQoS(); + newB.setId(qosBId); + newB.setName("newB"); + newB.setStoragePoolId(FixturesTool.STORAGE_POOL_NFS_2); + newB.setInboundAverage(30); + newB.setInboundPeak(30); + newB.setInboundBurst(30); + newB.setOutboundAverage(30); + newB.setOutboundPeak(30); + newB.setOutboundBurst(30); + + dao.update(newB); + + NetworkQoS afterUpdate = dao.get(qosBId); + assertTrue(newB.equals(afterUpdate)); + } + + /** + * test remove + */ + @Test + public void testRemoveNetworkQos() { + dao.remove(qosCId); + NetworkQoS afterRemove = dao.get(qosCId); + assertNull(afterRemove); + } + + /** + * test save + */ + @Test + public void testSaveNetworkQos() { + NetworkQoS qosD = new NetworkQoS(); + qosD.setId(qosDId); + qosD.setName("qos_d"); + qosD.setStoragePoolId(FixturesTool.STORAGE_POOL_NFS_2); + qosD.setInboundAverage(200); + qosD.setInboundPeak(200); + qosD.setInboundBurst(200); + qosD.setOutboundAverage(200); + qosD.setOutboundPeak(200); + qosD.setOutboundBurst(200); + + dao.save(qosD); + NetworkQoS returnedD = dao.get(qosDId); + assertTrue(qosD.equals(returnedD)); + } + + /** + * Test getAllForStoragePool + */ + @Test + public void testGetAllNetworkQosForStoragePool() { + assertTrue(dao.getAllForStoragePoolId(FixturesTool.STORAGE_POOL_NFS_2).size() == 2); + } + +} diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index c020b0b..09fc19d 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -5272,4 +5272,49 @@ <value>2012-12-31 11:54:27</value> </row> </table> + + <table name="network_qos"> + <column>id</column> + <column>name</column> + <column>storage_pool_id</column> + <column>inbound_average</column> + <column>inbound_peak</column> + <column>inbound_burst</column> + <column>outbound_average</column> + <column>outbound_peak</column> + <column>outbound_burst</column> + <row> + <value>ae956031-6be2-43d6-bb90-5191c9253314</value> + <value>qos_a</value> + <value>386bffd1-e7ed-4b08-bce9-d7df10f8c9a0</value> + <value>1000</value> + <value>2000</value> + <value>500</value> + <value>1000</value> + <value>2000</value> + <value>500</value> + </row> + <row> + <value>ae956031-6be2-43d6-bb90-5191c9253315</value> + <value>qos_b</value> + <value>386bffd1-e7ed-4b08-bce9-d7df10f8c9a0</value> + <value>1200</value> + <value>2400</value> + <value>500</value> + <value>1200</value> + <value>2400</value> + <value>500</value> + </row> + <row> + <value>ae956031-6be2-43d6-bb90-5191c9253316</value> + <value>qos_c</value> + <value>72b9e200-f48b-4687-83f2-62828f249a47</value> + <value>700</value> + <value>1400</value> + <value>500</value> + <value>700</value> + <value>1400</value> + <value>500</value> + </row> + </table> </dataset> diff --git a/packaging/dbscripts/create_tables.sql b/packaging/dbscripts/create_tables.sql index 1c6654b..5c988dc 100644 --- a/packaging/dbscripts/create_tables.sql +++ b/packaging/dbscripts/create_tables.sql @@ -1167,6 +1167,29 @@ CONSTRAINT schema_version_primary_key PRIMARY KEY (id) ) WITH OIDS; +-- ---------------------------------------------------------------------- +-- table network_qos +-- ---------------------------------------------------------------------- + + +CREATE TABLE network_qos +( + id uuid NOT NULL, + name VARCHAR(50) NOT NULL, + storage_pool_id uuid NOT NULL, + inbound_average INTEGER, + inbound_peak INTEGER, + inbound_burst INTEGER, + outbound_average INTEGER, + outbound_peak INTEGER, + outbound_burst INTEGER, + _create_date TIMESTAMP WITH TIME ZONE default LOCALTIMESTAMP, + _update_date TIMESTAMP WITH TIME ZONE default NULL, + CONSTRAINT PK_network_qos_id PRIMARY KEY (id) +) WITH OIDS; + +ALTER TABLE network_qos ADD CONSTRAINT network_qos_storage_pool_fk +FOREIGN KEY(storage_pool_id) REFERENCES storage_pool(id); -- ---------------------------------------------------------------------- -- Foreign key constraints -- To view, visit http://gerrit.ovirt.org/16294 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If39d20b77d06165e4adcc27e6b6dc5458cac93d3 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: ofri masad <oma...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches