Daniel Erez has uploaded a new change for review.

Change subject: restapi: introducing virtio-scsi support
......................................................................

restapi: introducing virtio-scsi support

* A new DiskInterface: VIRTIO_SCSI
- Updated DiskInterface and DiskMapper accordingly

* SGIO attribute [1]
- A new attribute for LunDisk with VIRTIO_SCSI interface
- Added ScsiGenericIO enum
- Updated api.xsd, rsdl_metadata.yaml and DiskMapper accordingly

* New ActionGroup: CONFIGURE_SCSI_GENERIC_IO
- Updated PermitType and PermitMapper accordingly

[1] 'sgio': SCSI Generic IO - filtered/unfiltered
(indicates whether the OS kernel will filter unprivileged
SG_IO commands for the disk).

* Feature page: http://www.ovirt.org/Features/Virtio-SCSI

Change-Id: I8fdf89d826144885bcffd8ee29798102fcaceb44
Signed-off-by: Daniel Erez <[email protected]>
---
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DiskInterface.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/ScsiGenericIO.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/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
7 files changed, 70 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/07/14907/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DiskInterface.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DiskInterface.java
index 7747861..8510a70 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DiskInterface.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DiskInterface.java
@@ -17,7 +17,7 @@
 package org.ovirt.engine.api.model;
 
 public enum DiskInterface {
-    IDE, VIRTIO;
+    IDE, VIRTIO_SCSI, VIRTIO;
 
     public String value() {
         return name().toLowerCase();
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
index 090870d..441a094 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/PermitType.java
@@ -93,6 +93,7 @@
     EDIT_DISK_PROPERTIES,
     CONFIGURE_DISK_STORAGE,
     DELETE_DISK,
+    CONFIGURE_SCSI_GENERIC_IO,
 
     // Vm Interface action groups
     PORT_MIRRORING,
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/ScsiGenericIO.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/ScsiGenericIO.java
new file mode 100644
index 0000000..59916e2
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/ScsiGenericIO.java
@@ -0,0 +1,18 @@
+package org.ovirt.engine.api.model;
+
+public enum ScsiGenericIO {
+    FILTERED,
+    UNFILTERED;
+
+    public String value() {
+        return name().toLowerCase();
+    }
+
+    public static ScsiGenericIO fromValue(String value) {
+        try {
+            return valueOf(value.toUpperCase());
+        } catch (IllegalArgumentException e) {
+            return null;
+        }
+    }
+}
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 c57c0a3..098eeff 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
@@ -2406,6 +2406,7 @@
           <xs:element name="active" type="xs:boolean" minOccurs="0"/>
           <xs:element ref="quota" minOccurs="0" maxOccurs="1"/>
           <xs:element name="lun_storage" type="Storage" minOccurs="0"/>
+          <xs:element name="sgio" type="xs:string" minOccurs="0"/>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
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 422423e..c3f42c8 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
@@ -349,6 +349,7 @@
           disk.shareable: xs:boolean
           disk.propagate_errors: xs:boolean
           disk.wipe_after_delete: xs:boolean
+          disk.sgio: xs:string
     urlparams: {}
     headers:
       Content-Type: {value: application/xml|json, required: true}
@@ -379,6 +380,7 @@
           disk.shareable: xs:boolean
           disk.propagate_errors: xs:boolean
           disk.wipe_after_delete: xs:boolean
+          disk.sgio: xs:string
           disk.storage_domains.storage_domain--COLLECTION: 
{storage_domain.id|name: 'xs:string'}
       - mandatoryArguments: {disk.id: 'xs:string'}
         optionalArguments: {disk.active: 'xs:boolean'}
@@ -735,6 +737,7 @@
           disk.shareable: xs:boolean
           disk.propagate_errors: xs:boolean
           disk.wipe_after_delete: xs:boolean
+          disk.sgio: xs:string
           disk.storage_domains.storage_domain--COLLECTION: 
{storage_domain.id|name: 'xs:string'}
     urlparams: {}
     headers:
@@ -3082,6 +3085,7 @@
           disk.shareable: xs:boolean
           disk.propagate_errors: xs:boolean
           disk.wipe_after_delete: xs:boolean
+          disk.sgio: xs:string
     urlparams:
       unregistered: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
     headers:
@@ -3141,6 +3145,7 @@
           disk.shareable: xs:boolean
           disk.propagate_errors: xs:boolean
           disk.wipe_after_delete: xs:boolean
+          disk.sgio: xs:string
     urlparams:
       unregistered: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
     headers:
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java
index 06b43b9..5cfd614 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java
@@ -8,6 +8,7 @@
 import org.ovirt.engine.api.model.DiskInterface;
 import org.ovirt.engine.api.model.DiskStatus;
 import org.ovirt.engine.api.model.Quota;
+import org.ovirt.engine.api.model.ScsiGenericIO;
 import org.ovirt.engine.api.model.Storage;
 import org.ovirt.engine.api.model.StorageDomain;
 import org.ovirt.engine.api.model.StorageDomains;
@@ -67,6 +68,12 @@
         }
         if (disk.isSetLunStorage()) {
             
((LunDisk)engineDisk).setLun(StorageLogicalUnitMapper.map(disk.getLunStorage(), 
null));
+            if (disk.isSetSgio() && engineDisk.getDiskInterface() == 
map(DiskInterface.VIRTIO_SCSI, null)) {
+                ScsiGenericIO scsiGenericIO = 
ScsiGenericIO.fromValue(disk.getSgio());
+                if (scsiGenericIO != null) {
+                    engineDisk.setSgio(map(scsiGenericIO, null));
+                }
+            }
         } else {
             mapDiskToDiskImageProperties(disk, (DiskImage) engineDisk);
         }
@@ -139,6 +146,9 @@
             mapDiskImageToDiskFields((DiskImage) entity, model);
         } else {
             model.setLunStorage(StorageLogicalUnitMapper.map(((LunDisk) 
entity).getLun(), new Storage()));
+            if (entity.getSgio() != null && entity.getDiskInterface() == 
map(DiskInterface.VIRTIO_SCSI, null)) {
+                model.setSgio(map(entity.getSgio(), null));
+            }
         }
         return model;
     }
@@ -208,6 +218,8 @@
             return 
org.ovirt.engine.core.common.businessentities.DiskInterface.IDE;
         case VIRTIO:
             return 
org.ovirt.engine.core.common.businessentities.DiskInterface.VirtIO;
+        case VIRTIO_SCSI:
+            return 
org.ovirt.engine.core.common.businessentities.DiskInterface.VirtIO_SCSI;
         default:
             return null;
         }
@@ -220,6 +232,34 @@
             return DiskInterface.IDE.value();
         case VirtIO:
             return DiskInterface.VIRTIO.value();
+        case VirtIO_SCSI:
+            return DiskInterface.VIRTIO_SCSI.value();
+        default:
+            return null;
+        }
+    }
+
+    @Mapping(from = ScsiGenericIO.class, to = 
org.ovirt.engine.core.common.businessentities.ScsiGenericIO.class)
+    public static org.ovirt.engine.core.common.businessentities.ScsiGenericIO 
map(
+            ScsiGenericIO scsiGenericIO,
+            org.ovirt.engine.core.common.businessentities.ScsiGenericIO 
template) {
+        switch (scsiGenericIO) {
+        case FILTERED:
+            return 
org.ovirt.engine.core.common.businessentities.ScsiGenericIO.FILTERED;
+        case UNFILTERED:
+            return 
org.ovirt.engine.core.common.businessentities.ScsiGenericIO.UNFILTERED;
+        default:
+            return null;
+        }
+    }
+
+    @Mapping(from = 
org.ovirt.engine.core.common.businessentities.ScsiGenericIO.class, to = 
String.class)
+    public static String 
map(org.ovirt.engine.core.common.businessentities.ScsiGenericIO scsiGenericIO, 
String template) {
+        switch (scsiGenericIO) {
+        case FILTERED:
+            return ScsiGenericIO.FILTERED.value();
+        case UNFILTERED:
+            return ScsiGenericIO.UNFILTERED.value();
         default:
             return null;
         }
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
index 1b16303..3035b98 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/PermitMapper.java
@@ -166,6 +166,8 @@
             return PermitType.LOGIN;
         case INJECT_EXTERNAL_EVENTS:
             return PermitType.INJECT_EXTERNAL_EVENTS;
+        case CONFIGURE_SCSI_GENERIC_IO:
+            return PermitType.CONFIGURE_SCSI_GENERIC_IO;
         default:
             return null;
         }
@@ -298,6 +300,8 @@
             return ActionGroup.DELETE_STORAGE_POOL_NETWORK;
         case ASSIGN_CLUSTER_NETWORK:
             return ActionGroup.ASSIGN_CLUSTER_NETWORK;
+        case CONFIGURE_SCSI_GENERIC_IO:
+            return ActionGroup.CONFIGURE_SCSI_GENERIC_IO;
         default:
             return null;
         }


--
To view, visit http://gerrit.ovirt.org/14907
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8fdf89d826144885bcffd8ee29798102fcaceb44
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to