Martin Betak has uploaded a new change for review. Change subject: restapi: Add per-VM migration_downtime to REST API ......................................................................
restapi: Add per-VM migration_downtime to REST API Added migration_downtime field to VM representing maximum number of milliseconds for downtime during live migration. Due to problems representing the Integer value of 'null' which has semantic meaning on the backend, in the API we represent this "use default" option using integer "-1" which is outside the range of valid timeouts. Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1055434 Change-Id: I53eaecc790d8805f55417f7eb74095001a325140 Signed-off-by: Martin Betak <mbe...@redhat.com> --- 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 A backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/IntegerMapper.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java M backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java M backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java 7 files changed, 61 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/34/23434/1 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 5cfdf2d..c53f66b 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 @@ -2307,6 +2307,7 @@ <xs:element ref="domain" minOccurs="0" maxOccurs="1"/> <xs:element ref="usb" minOccurs="0" maxOccurs="1"/> <xs:element name="tunnel_migration" type="xs:boolean" minOccurs="0" maxOccurs="1"/> + <xs:element name="migration_downtime" type="xs:int" minOccurs="0" maxOccurs="1" /> <xs:element ref="virtio_scsi" minOccurs="0" maxOccurs="1"/> <xs:element ref="permissions" minOccurs="0" maxOccurs="1"/> <!-- also rel="cdroms/disks/nics/watchdogs" links, see Devices below --> @@ -2618,6 +2619,7 @@ <xs:element ref="quota" minOccurs="0" maxOccurs="1"/> <xs:element ref="usb" minOccurs="0" maxOccurs="1"/> <xs:element name="tunnel_migration" type="xs:boolean" minOccurs="0" maxOccurs="1"/> + <xs:element name="migration_downtime" type="xs:int" minOccurs="0" maxOccurs="1" /> <xs:element ref="virtio_scsi" minOccurs="0" maxOccurs="1"/> <xs:element ref="permissions" minOccurs="0" maxOccurs="1"/> <xs:element ref="vmpool" minOccurs="0" maxOccurs="1"> 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 25ef2f3..576232f 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 @@ -85,6 +85,7 @@ vm.origin: xs:string vm.os.kernel: xs:string vm.tunnel_migration: xs:boolean + vm.migration_downtime: xs:int vm.virtio_scsi.enabled: xs:boolean vm.payloads.payload--COLLECTION: {payload.type: 'xs:string', payload.volume_id: 'xs:string', payload.files.file--COLLECTION: {file.name: 'xs:string', file.content: 'xs:string'}} vm.cpu.cpu_tune.vcpu_pin--COLLECTION: {vcpu_pin.vcpu: 'xs:int', vcpu_pin.cpu_set: 'xs:string'} @@ -158,6 +159,7 @@ vm.os.kernel: xs:string vm.disks.clone: xs:boolean vm.tunnel_migration: xs:boolean + vm.migration_downtime: xs:int vm.virtio_scsi.enabled: xs:boolean vm.payloads.payload--COLLECTION: {payload.type: 'xs:string', payload.volume_id: 'xs:string', payload.files.file--COLLECTION: {file.name: 'xs:string', file.content: 'xs:string'}} vm.initialization.configuration.type: 'xs:string' @@ -204,6 +206,7 @@ vm.origin: xs:string vm.os.kernel: xs:string vm.tunnel_migration: xs:boolean + vm.migration_downtime: xs:int vm.virtio_scsi.enabled: xs:boolean vm.payloads.payload--COLLECTION: {payload.type: 'xs:string', payload.volume_id: 'xs:string', payload.files.file--COLLECTION: {file.name: 'xs:string', file.content: 'xs:string'}} vm.cpu.cpu_tune.vcpu_pin--COLLECTION: {vcpu_pin.vcpu: 'xs:int', vcpu_pin.cpu_set: 'xs:string'} @@ -247,6 +250,7 @@ vm.os.kernel: xs:string vm.disks.clone: xs:boolean vm.tunnel_migration: xs:boolean + vm.migration_downtime: xs:int vm.virtio_scsi.enabled: xs:boolean vm.payloads.payload--COLLECTION: {payload.type: 'xs:string', payload.volume_id: 'xs:string', payload.files.file--COLLECTION: {file.name: 'xs:string', file.content: 'xs:string'}} vm.initialization.configuration.type: 'xs:string' @@ -3348,6 +3352,7 @@ template.usb.enabled: xs:boolean template.usb.type: xs:string template.tunnel_migration: xs:boolean + template.migration_downtime: xs:int template.virtio_scsi.enabled: xs:boolean description: update the specified template in the system urlparams: {} @@ -3395,6 +3400,7 @@ template.usb.enabled: xs:boolean template.usb.type: xs:string template.tunnel_migration: xs:boolean + template.migration_downtime: xs:int template.virtio_scsi.enabled: xs:boolean template.vm.disks.disk--COLLECTION: {disk.id: 'xs:string', storage_domains.storage_domain--COLLECTION: {storage_domain.id: 'xs:string'}} template.permissions.clone: xs:boolean diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/IntegerMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/IntegerMapper.java new file mode 100644 index 0000000..4368e0f --- /dev/null +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/IntegerMapper.java @@ -0,0 +1,32 @@ +package org.ovirt.engine.api.restapi.types; + +/** + * Utility class containing mappings between various integer representations of special values + * which differ between REST API and the backend. + */ +public final class IntegerMapper { + + /** + * Facilitates conversion between integer that uses null to represent the default value on the backend + * to integers that use -1 for default on the rest + */ + public static Integer mapNullToMinusOne(Integer backendValue) { + if (backendValue == null) { + return -1; + } + + return backendValue; + } + + /** + * Facilitates conversion between integer that uses -1 to represent default value on the rest side + * to integers that use null for default on the backend + */ + public static Integer mapMinusOneToNull(Integer restValue) { + if (restValue == -1) { + return null; + } + + return restValue; + } +} diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java index f00359a..ed43eb6 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/TemplateMapper.java @@ -26,6 +26,9 @@ import org.ovirt.engine.core.common.osinfo.OsRepository; import org.ovirt.engine.core.common.utils.SimpleDependecyInjector; +import static org.ovirt.engine.api.restapi.types.IntegerMapper.mapNullToMinusOne; +import static org.ovirt.engine.api.restapi.types.IntegerMapper.mapMinusOneToNull; + public class TemplateMapper { private static final int BYTES_PER_MB = 1024 * 1024; @@ -152,6 +155,9 @@ if (model.isSetTunnelMigration()) { entity.setTunnelMigration(model.isTunnelMigration()); } + if (model.isSetMigrationDowntime()) { + entity.setMigrationDowntime(mapMinusOneToNull(model.getMigrationDowntime())); + } return entity; } @@ -266,6 +272,9 @@ if (model.isSetTunnelMigration()) { staticVm.setTunnelMigration(model.isTunnelMigration()); } + if (model.isSetMigrationDowntime()) { + staticVm.setMigrationDowntime(mapMinusOneToNull(model.getMigrationDowntime())); + } return staticVm; } @@ -352,6 +361,8 @@ } model.setTimezone(entity.getTimeZone()); model.setTunnelMigration(entity.getTunnelMigration()); + model.setMigrationDowntime(mapNullToMinusOne(entity.getMigrationDowntime())); + return model; } diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java index e433866..67bbd74 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java @@ -75,6 +75,9 @@ import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; +import static org.ovirt.engine.api.restapi.types.IntegerMapper.mapNullToMinusOne; +import static org.ovirt.engine.api.restapi.types.IntegerMapper.mapMinusOneToNull; + public class VmMapper { private static final int BYTES_PER_MB = 1024 * 1024; @@ -117,6 +120,7 @@ staticVm.setUsbPolicy(entity.getUsbPolicy()); staticVm.setTunnelMigration(entity.getTunnelMigration()); staticVm.setVncKeyboardLayout(entity.getVncKeyboardLayout()); + staticVm.setMigrationDowntime(entity.getMigrationDowntime()); return staticVm; } @@ -270,6 +274,9 @@ } if (vm.isSetTunnelMigration()) { staticVm.setTunnelMigration(vm.isTunnelMigration()); + } + if (vm.isSetMigrationDowntime()) { + staticVm.setMigrationDowntime(mapMinusOneToNull(vm.getMigrationDowntime())); } return staticVm; } @@ -489,6 +496,7 @@ model.setQuota(quota); } model.setTunnelMigration(entity.getTunnelMigration()); + model.setMigrationDowntime(mapNullToMinusOne(entity.getMigrationDowntime())); return model; } diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java index d206616..eb4aa87 100644 --- a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/TemplateMapperTest.java @@ -79,5 +79,6 @@ assertEquals(model.getDisplay().isSmartcardEnabled(), transform.getDisplay().isSmartcardEnabled()); assertEquals(model.isDeleteProtected(), transform.isDeleteProtected()); assertEquals(model.isTunnelMigration(), transform.isTunnelMigration()); + assertEquals(model.getMigrationDowntime(), transform.getMigrationDowntime()); } } diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java index 25bbb38..d002278 100644 --- a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java @@ -135,6 +135,7 @@ assertEquals(model.getDisplay().getKeyboardLayout(), transform.getDisplay().getKeyboardLayout()); assertEquals(model.isDeleteProtected(), transform.isDeleteProtected()); assertEquals(model.isTunnelMigration(), transform.isTunnelMigration()); + assertEquals(model.getMigrationDowntime(), transform.getMigrationDowntime()); } @Test -- To view, visit http://gerrit.ovirt.org/23434 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I53eaecc790d8805f55417f7eb74095001a325140 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Martin Betak <mbe...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches