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

Reply via email to