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

Reply via email to