Gilad Chaplik has uploaded a new change for review. Change subject: restapi: support for adding network QoS ......................................................................
restapi: support for adding network QoS Adding a NETWORK type for QoS entity, and adding it to current QoS infra. Adding QoS to Vnic Profile entity. Change-Id: I5104c61b484683fbee0ead9a9d0934ec93a6c4cd Bug-Url: https://bugzilla.redhat.com/1078863 Signed-off-by: Gilad Chaplik <gchap...@redhat.com> --- M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/QosType.java M backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd M backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQosResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQossResource.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/QosMapper.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VnicProfileMapper.java A backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NetworkQosMapperTest.java 9 files changed, 118 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/66/31866/1 diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/QosType.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/QosType.java index 92bbfbd..8f17d80 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/QosType.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/QosType.java @@ -2,7 +2,8 @@ public enum QosType { STORAGE, - CPU; + CPU, + NETWORK; public String value() { return name().toLowerCase(); diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd index e07001e..3b61f0f 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd @@ -2363,6 +2363,7 @@ <xs:element ref="network" minOccurs="0" maxOccurs="1"/> <xs:element name="port_mirroring" type="xs:boolean" minOccurs="0"/> <xs:element ref="custom_properties" minOccurs="0"/> + <xs:element ref="qos" minOccurs="0" maxOccurs="1"/> </xs:sequence> </xs:extension> </xs:complexContent> @@ -4576,6 +4577,18 @@ minOccurs="0" maxOccurs="1" /> <xs:element name="cpu_limit" type="xs:int" minOccurs="0" maxOccurs="1" /> + <xs:element name="inbound_average" type="xs:int" minOccurs="0" + maxOccurs="1" /> + <xs:element name="inbound_peak" type="xs:int" minOccurs="0" + maxOccurs="1" /> + <xs:element name="inbound_burst" type="xs:int" minOccurs="0" + maxOccurs="1" /> + <xs:element name="outbound_average" type="xs:int" minOccurs="0" + maxOccurs="1" /> + <xs:element name="outbound_peak" type="xs:int" minOccurs="0" + maxOccurs="1" /> + <xs:element name="outbound_burst" type="xs:int" minOccurs="0" + maxOccurs="1" /> </xs:sequence> <xs:attribute name="type" type="xs:string"/> </xs:extension> diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml index ca2cc3d..04eeb83 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml @@ -1411,7 +1411,13 @@ qos.max_iops: 'xs:int', qos.max_read_iops: 'xs:int', qos.max_write_iops: 'xs:int', - qos.cpu_limit: 'xs:int'} + qos.cpu_limit: 'xs:int', + qos.inbound_average: 'xs:int', + qos.inbound_peak: 'xs:int', + qos.inbound_burst: 'xs:int', + qos.outbound_average: 'xs:int', + qos.outbound_peak: 'xs:int', + qos.outbound_burst: 'xs:int'} urlparams: {} headers: Content-Type: {value: application/xml|json, required: true} @@ -1430,7 +1436,13 @@ qos.max_iops: 'xs:int', qos.max_read_iops: 'xs:int', qos.max_write_iops: 'xs:int', - qos.cpu_limit: 'xs:int'} + qos.cpu_limit: 'xs:int', + qos.inbound_average: 'xs:int', + qos.inbound_peak: 'xs:int', + qos.inbound_burst: 'xs:int', + qos.outbound_average: 'xs:int', + qos.outbound_peak: 'xs:int', + qos.outbound_burst: 'xs:int'} description: add a new QoS to the datacenter urlparams: {} headers: diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java index 8d8dc2f..921bc49 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCapabilitiesResource.java @@ -882,6 +882,9 @@ private void addSupportedQosTypes(VersionCaps version) { version.setQosTypes(new QosTypes()); + if (VersionUtils.greaterOrEqual(version, VERSION_3_3)) { + version.getQosTypes().getQosTypes().add(org.ovirt.engine.api.model.QosType.NETWORK.name().toLowerCase()); + } if (VersionUtils.greaterOrEqual(version, VERSION_3_5)) { version.getQosTypes().getQosTypes().add(org.ovirt.engine.api.model.QosType.STORAGE.name().toLowerCase()); version.getQosTypes().getQosTypes().add(org.ovirt.engine.api.model.QosType.CPU.name().toLowerCase()); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQosResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQosResource.java index 1ccaba3..994fe80 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQosResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQosResource.java @@ -45,7 +45,9 @@ case CPU: updateActionType = VdcActionType.UpdateCpuQos; break; - + case NETWORK: + updateActionType = VdcActionType.UpdateNetworkQoS; + break; default: break; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQossResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQossResource.java index d1a5e30..5709320 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQossResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendQossResource.java @@ -12,6 +12,7 @@ import org.ovirt.engine.api.restapi.utils.GuidUtils; import org.ovirt.engine.core.common.action.QosParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.network.NetworkQoS; import org.ovirt.engine.core.common.businessentities.qos.CpuQos; import org.ovirt.engine.core.common.businessentities.qos.QosBase; import org.ovirt.engine.core.common.businessentities.qos.QosType; @@ -52,6 +53,10 @@ entity = new CpuQos(); addVdcActionType = VdcActionType.AddCpuQos; break; + case NETWORK: + entity = new NetworkQoS(); + addVdcActionType = VdcActionType.AddNetworkQoS; + break; default: break; } diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/QosMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/QosMapper.java index 1f4badd..93f0950 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/QosMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/QosMapper.java @@ -4,6 +4,7 @@ import org.ovirt.engine.api.model.QoS; import org.ovirt.engine.api.model.QosType; import org.ovirt.engine.api.restapi.utils.GuidUtils; +import org.ovirt.engine.core.common.businessentities.network.NetworkQoS; import org.ovirt.engine.core.common.businessentities.qos.CpuQos; import org.ovirt.engine.core.common.businessentities.qos.QosBase; import org.ovirt.engine.core.common.businessentities.qos.StorageQos; @@ -48,6 +49,23 @@ return model; } model.setCpuLimit(cpuQos.getCpuLimit()); + break; + case NETWORK: + NetworkQoS networkQos = null; + // avoid findbugs error. + if (entity instanceof NetworkQoS) { + networkQos = (NetworkQoS) entity; + } + // avoid findbugs error. + if (networkQos == null) { + return model; + } + model.setInboundAverage(networkQos.getInboundAverage()); + model.setInboundPeak(networkQos.getInboundPeak()); + model.setInboundBurst(networkQos.getInboundBurst()); + model.setOutboundAverage(networkQos.getOutboundAverage()); + model.setOutboundPeak(networkQos.getOutboundPeak()); + model.setOutboundBurst(networkQos.getOutboundBurst()); break; default: break; @@ -105,6 +123,30 @@ .setCpuLimit(IntegerMapper.mapMinusOneToNull(model.getCpuLimit())); } break; + case NETWORK: + if (entity == null) { + entity = new NetworkQoS(); + } + if (model.isSetInboundAverage()) { + ((NetworkQoS) entity).setInboundAverage(IntegerMapper.mapMinusOneToNull(model.getInboundAverage())); + } + if (model.isSetInboundPeak()) { + ((NetworkQoS) entity).setInboundPeak(IntegerMapper.mapMinusOneToNull(model.getInboundPeak())); + } + if (model.isSetInboundBurst()) { + ((NetworkQoS) entity).setInboundBurst(IntegerMapper.mapMinusOneToNull(model.getInboundBurst())); + } + if (model.isSetOutboundAverage()) { + ((NetworkQoS) entity).setOutboundAverage(IntegerMapper.mapMinusOneToNull(model.getOutboundAverage())); + } + if (model.isSetOutboundPeak()) { + ((NetworkQoS) entity).setOutboundPeak(IntegerMapper.mapMinusOneToNull(model.getOutboundPeak())); + + } + if (model.isSetOutboundBurst()) { + ((NetworkQoS) entity).setOutboundBurst(IntegerMapper.mapMinusOneToNull(model.getOutboundBurst())); + } + break; default: break; } diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VnicProfileMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VnicProfileMapper.java index 3b219e2..a654be9 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VnicProfileMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VnicProfileMapper.java @@ -2,6 +2,7 @@ import org.ovirt.engine.api.model.CustomProperties; import org.ovirt.engine.api.model.Network; +import org.ovirt.engine.api.model.QoS; import org.ovirt.engine.api.model.VnicProfile; import org.ovirt.engine.api.restapi.utils.CustomPropertiesParser; import org.ovirt.engine.api.restapi.utils.GuidUtils; @@ -32,7 +33,9 @@ entity.setCustomProperties(DevicePropertiesUtils.getInstance() .convertProperties(CustomPropertiesParser.parse(model.getCustomProperties().getCustomProperty()))); } - + if (model.isSetQos() && model.getQos().isSetId()) { + entity.setNetworkQosId(GuidUtils.asGuid(model.getQos().getId())); + } return entity; } @@ -60,7 +63,10 @@ DevicePropertiesUtils.getInstance().convertProperties(entity.getCustomProperties()), false)); model.setCustomProperties(hooks); } - + if (entity.getNetworkQosId() != null) { + model.setQos(new QoS()); + model.getQos().setId(entity.getNetworkQosId().toString()); + } return model; } } diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NetworkQosMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NetworkQosMapperTest.java new file mode 100644 index 0000000..ed82e99 --- /dev/null +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/NetworkQosMapperTest.java @@ -0,0 +1,28 @@ +package org.ovirt.engine.api.restapi.types; + +import org.ovirt.engine.api.model.QoS; +import org.ovirt.engine.api.model.QosType; + +public class NetworkQosMapperTest extends QosMapperTest { + + @Override + protected void verify(QoS model, QoS transform) { + super.verify(model, transform); + + // network limits: + assertEquals(model.getInboundAverage(), transform.getInboundAverage()); + assertEquals(model.getInboundPeak(), transform.getInboundPeak()); + assertEquals(model.getInboundBurst(), transform.getInboundBurst()); + assertEquals(model.getOutboundAverage(), transform.getOutboundAverage()); + assertEquals(model.getOutboundPeak(), transform.getOutboundPeak()); + assertEquals(model.getOutboundBurst(), transform.getOutboundBurst()); + } + + @Override + protected QoS postPopulate(QoS model) { + model = super.postPopulate(model); + model.setType(QosType.NETWORK.name().toLowerCase()); + return model; + + } +} -- To view, visit http://gerrit.ovirt.org/31866 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5104c61b484683fbee0ead9a9d0934ec93a6c4cd Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches