Gilad Chaplik has uploaded a new change for review. Change subject: restapi: support cpu qos limit ......................................................................
restapi: support cpu qos limit Add it to current qos infra. Change-Id: I176f7d3e5776c515f09db94177eeb679e71412af 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 A backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/CpuQosMapperTest.java M backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/QosMapperTest.java A backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/StorageQosMapperTest.java 10 files changed, 92 insertions(+), 20 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/31841/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 25f5389..92bbfbd 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 @@ -1,7 +1,8 @@ package org.ovirt.engine.api.model; public enum QosType { - STORAGE; + STORAGE, + CPU; 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 e30c18a..1d77a31 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 @@ -4572,6 +4572,8 @@ minOccurs="0" maxOccurs="1" /> <xs:element name="max_write_iops" type="xs:int" minOccurs="0" maxOccurs="1" /> + <xs:element name="cpu_limit" 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 a79bd9a..e7a6027 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 @@ -1406,7 +1406,8 @@ qos.max_write_throughput: 'xs:int', qos.max_iops: 'xs:int', qos.max_read_iops: 'xs:int', - qos.max_write_iops: 'xs:int'} + qos.max_write_iops: 'xs:int', + qos.cpu_limit: 'xs:int'} urlparams: {} headers: Content-Type: {value: application/xml|json, required: true} @@ -1424,7 +1425,8 @@ qos.max_write_throughput: 'xs:int', qos.max_iops: 'xs:int', qos.max_read_iops: 'xs:int', - qos.max_write_iops: 'xs:int'} + qos.max_write_iops: 'xs:int', + qos.cpu_limit: '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 4950867..8d8dc2f 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 @@ -884,6 +884,7 @@ version.setQosTypes(new QosTypes()); 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 91aee74..1ccaba3 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 @@ -42,6 +42,9 @@ case STORAGE: updateActionType = VdcActionType.UpdateStorageQos; break; + case CPU: + updateActionType = VdcActionType.UpdateCpuQos; + 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 eb82132..d1a5e30 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.qos.CpuQos; import org.ovirt.engine.core.common.businessentities.qos.QosBase; import org.ovirt.engine.core.common.businessentities.qos.QosType; import org.ovirt.engine.core.common.businessentities.qos.StorageQos; @@ -47,7 +48,10 @@ entity = new StorageQos(); addVdcActionType = VdcActionType.AddStorageQos; break; - + case CPU: + entity = new CpuQos(); + addVdcActionType = VdcActionType.AddCpuQos; + 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 f744a41..1f4badd 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.qos.CpuQos; import org.ovirt.engine.core.common.businessentities.qos.QosBase; import org.ovirt.engine.core.common.businessentities.qos.StorageQos; @@ -35,6 +36,19 @@ model.setMaxIops(storageQos.getMaxIops()); model.setMaxReadIops(storageQos.getMaxReadIops()); model.setMaxWriteIops(storageQos.getMaxWriteIops()); + break; + case CPU: + CpuQos cpuQos = null; + // avoid findbugs error. + if (entity instanceof CpuQos) { + cpuQos = (CpuQos) entity; + } + // avoid findbugs error. + if (cpuQos == null) { + return model; + } + model.setCpuLimit(cpuQos.getCpuLimit()); + break; default: break; } @@ -82,6 +96,15 @@ .setMaxWriteIops(IntegerMapper.mapMinusOneToNull(model.getMaxWriteIops())); } break; + case CPU: + if (entity == null) { + entity = new CpuQos(); + } + if (model.isSetCpuLimit()) { + ((CpuQos) entity) + .setCpuLimit(IntegerMapper.mapMinusOneToNull(model.getCpuLimit())); + } + break; default: break; } diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/CpuQosMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/CpuQosMapperTest.java new file mode 100644 index 0000000..5c00603 --- /dev/null +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/CpuQosMapperTest.java @@ -0,0 +1,23 @@ +package org.ovirt.engine.api.restapi.types; + +import org.ovirt.engine.api.model.QoS; +import org.ovirt.engine.api.model.QosType; + +public class CpuQosMapperTest extends QosMapperTest { + + @Override + protected void verify(QoS model, QoS transform) { + super.verify(model, transform); + + // cpu limits: + assertEquals(model.getCpuLimit(), transform.getCpuLimit()); + } + + @Override + protected QoS postPopulate(QoS model) { + model = super.postPopulate(model); + model.setType(QosType.CPU.name().toLowerCase()); + return model; + + } +} diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/QosMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/QosMapperTest.java index 0458ea0..8c4f2e6 100644 --- a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/QosMapperTest.java +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/QosMapperTest.java @@ -1,10 +1,9 @@ package org.ovirt.engine.api.restapi.types; import org.ovirt.engine.api.model.QoS; -import org.ovirt.engine.api.model.QosType; import org.ovirt.engine.core.common.businessentities.qos.QosBase; -public class QosMapperTest extends AbstractInvertibleMappingTest<QoS, QosBase, QosBase> { +public abstract class QosMapperTest extends AbstractInvertibleMappingTest<QoS, QosBase, QosBase> { public QosMapperTest() { super(QoS.class, @@ -21,20 +20,6 @@ assertEquals(model.getDataCenter().getId(), transform.getDataCenter().getId()); assertEquals(model.getType(), transform.getType()); assertEquals(model.getDescription(), transform.getDescription()); - - // storage limits: - assertEquals(model.getMaxThroughput(), transform.getMaxThroughput()); - assertEquals(model.getMaxReadThroughput(), transform.getMaxReadThroughput()); - assertEquals(model.getMaxWriteThroughput(), transform.getMaxWriteThroughput()); - assertEquals(model.getMaxIops(), transform.getMaxIops()); - assertEquals(model.getMaxReadIops(), transform.getMaxReadIops()); - assertEquals(model.getMaxWriteIops(), transform.getMaxWriteIops()); } - @Override - protected QoS postPopulate(QoS model) { - model = super.postPopulate(model); - model.setType(MappingTestHelper.shuffle(QosType.class).name().toLowerCase()); - return model; - } } diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/StorageQosMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/StorageQosMapperTest.java new file mode 100644 index 0000000..419bc8b --- /dev/null +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/StorageQosMapperTest.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 StorageQosMapperTest extends QosMapperTest { + + @Override + protected void verify(QoS model, QoS transform) { + super.verify(model, transform); + + // storage limits: + assertEquals(model.getMaxThroughput(), transform.getMaxThroughput()); + assertEquals(model.getMaxReadThroughput(), transform.getMaxReadThroughput()); + assertEquals(model.getMaxWriteThroughput(), transform.getMaxWriteThroughput()); + assertEquals(model.getMaxIops(), transform.getMaxIops()); + assertEquals(model.getMaxReadIops(), transform.getMaxReadIops()); + assertEquals(model.getMaxWriteIops(), transform.getMaxWriteIops()); + } + + @Override + protected QoS postPopulate(QoS model) { + model = super.postPopulate(model); + model.setType(QosType.STORAGE.name().toLowerCase()); + return model; + + } +} -- To view, visit http://gerrit.ovirt.org/31841 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I176f7d3e5776c515f09db94177eeb679e71412af 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