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
