Daniel Erez has uploaded a new change for review. Change subject: core: support hot plug for Cinder disks ......................................................................
core: support hot plug for Cinder disks Support hot-plugging Cinder disks: * Invoke 'VmInfoBuilder.buildCinderDisk' on HotPlugDiskVDSCommand. * Update disk's CinderConnectionInfo on AbstractDiskVmCommand. Change-Id: Ibe00f9e568a5ee0da1667bb8e57ac075cd5d03ed Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Daniel Erez <de...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java 2 files changed, 68 insertions(+), 34 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/39658/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java index 2b6a6cc..74fa6de 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AbstractDiskVmCommand.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; +import com.woorea.openstack.base.client.OpenStackResponseException; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.storage.CinderBroker; @@ -14,6 +15,7 @@ import org.ovirt.engine.core.bll.validator.LocalizedVmStatus; import org.ovirt.engine.core.bll.validator.VmValidator; import org.ovirt.engine.core.bll.validator.storage.DiskValidator; +import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.action.VmDiskOperationParameterBase; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; @@ -21,6 +23,9 @@ import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmDevice; import org.ovirt.engine.core.common.businessentities.network.VmNic; +import org.ovirt.engine.core.common.businessentities.storage.CinderConnectionInfo; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; +import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeDriver; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.LUNs; @@ -74,6 +79,23 @@ throw new VdcBLLException(VdcBllErrors.StorageServerConnectionError); } } + } + } else if (disk.getDiskStorageType() == DiskStorageType.CINDER) { + CinderDisk cinderDisk = (CinderDisk) disk; + setStorageDomainId(cinderDisk.getStorageIds().get(0)); + try { + CinderConnectionInfo connectionInfo = getCinderConnectionInfo(cinderDisk); + CinderVolumeDriver cinderVolumeDriver = CinderVolumeDriver.forValue(connectionInfo.getDriverVolumeType()); + if (cinderVolumeDriver == null) { + addCustomValue("DiskAlias", cinderDisk.getDiskAlias()); + auditLogDirector.log(this, AuditLogType.CINDER_DISK_CONNECTION_VOLUME_DRIVER_UNSUPPORTED); + } + cinderDisk.setCinderConnectionInfo(connectionInfo); + } + catch (OpenStackResponseException ex) { + addCustomValue("DiskAlias", cinderDisk.getDiskAlias()); + auditLogDirector.log(this, AuditLogType.CINDER_DISK_CONNECTION_FAILURE); + throw ex; } } runVdsCommand(commandType, new HotPlugDiskVDSParameters(getVm().getRunOnVds(), @@ -317,4 +339,8 @@ } return cinderBroker; } + + private CinderConnectionInfo getCinderConnectionInfo(CinderDisk cinderDisk) { + return getCinderBroker().initializeConnectionForDisk(cinderDisk); + } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java index 77b4c67..90dca0b 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java @@ -7,8 +7,8 @@ import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VmDevice; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.Disk; -import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.DiskInterface; import org.ovirt.engine.core.common.businessentities.storage.LunDisk; @@ -58,45 +58,53 @@ drive.put(VdsProperties.ReadOnly, String.valueOf(vmDevice.getIsReadOnly())); drive.put(VdsProperties.DeviceId, vmDevice.getId().getDeviceId().toString()); - if (disk.getDiskStorageType() == DiskStorageType.IMAGE) { - DiskImage diskImage = (DiskImage) disk; - drive.put(VdsProperties.Device, VmDeviceType.DISK.getName()); - drive.put(VdsProperties.Format, diskImage.getVolumeFormat().toString().toLowerCase()); - drive.put(VdsProperties.DomainId, diskImage.getStorageIds().get(0).toString()); - drive.put(VdsProperties.PoolId, diskImage.getStoragePoolId().toString()); - drive.put(VdsProperties.VolumeId, diskImage.getImageId().toString()); - drive.put(VdsProperties.ImageId, diskImage.getId().toString()); - drive.put(VdsProperties.PropagateErrors, disk.getPropagateErrors().toString().toLowerCase()); + switch (disk.getDiskStorageType()) { + case IMAGE: + DiskImage diskImage = (DiskImage) disk; + drive.put(VdsProperties.Device, VmDeviceType.DISK.getName()); + drive.put(VdsProperties.Format, diskImage.getVolumeFormat().toString().toLowerCase()); + drive.put(VdsProperties.DomainId, diskImage.getStorageIds().get(0).toString()); + drive.put(VdsProperties.PoolId, diskImage.getStoragePoolId().toString()); + drive.put(VdsProperties.VolumeId, diskImage.getImageId().toString()); + drive.put(VdsProperties.ImageId, diskImage.getId().toString()); + drive.put(VdsProperties.PropagateErrors, disk.getPropagateErrors().toString().toLowerCase()); - VmInfoBuilder.handleIoTune(getParameters().getVm(), vmDevice, diskImage, - new HashMap<Guid, Guid>(), new HashMap<Guid, Map<String, Long>>()); - if (vmDevice.getSpecParams() != null) { - drive.put(VdsProperties.SpecParams, vmDevice.getSpecParams()); - } - } else { - LunDisk lunDisk = (LunDisk) disk; + VmInfoBuilder.handleIoTune(getParameters().getVm(), vmDevice, diskImage, + new HashMap<Guid, Guid>(), new HashMap<Guid, Map<String, Long>>()); + if (vmDevice.getSpecParams() != null) { + drive.put(VdsProperties.SpecParams, vmDevice.getSpecParams()); + } + break; + case LUN: + LunDisk lunDisk = (LunDisk) disk; - // If SCSI pass-through is enabled (VirtIO-SCSI/DirectLUN disk and SGIO is defined), - // set device type as 'lun' (instead of 'disk') and set the specified SGIO - boolean isVirtioScsi = getParameters().getDisk().getDiskInterface() == DiskInterface.VirtIO_SCSI; - boolean isScsiPassthrough = getParameters().getDisk().isScsiPassthrough(); - if (isVirtioScsi) { - if (isScsiPassthrough) { - drive.put(VdsProperties.Device, VmDeviceType.LUN.getName()); - drive.put(VdsProperties.Sgio, getParameters().getDisk().getSgio().toString().toLowerCase()); + // If SCSI pass-through is enabled (VirtIO-SCSI/DirectLUN disk and SGIO is defined), + // set device type as 'lun' (instead of 'disk') and set the specified SGIO + boolean isVirtioScsi = getParameters().getDisk().getDiskInterface() == DiskInterface.VirtIO_SCSI; + boolean isScsiPassthrough = getParameters().getDisk().isScsiPassthrough(); + if (isVirtioScsi) { + if (isScsiPassthrough) { + drive.put(VdsProperties.Device, VmDeviceType.LUN.getName()); + drive.put(VdsProperties.Sgio, getParameters().getDisk().getSgio().toString().toLowerCase()); + } + else { + drive.put(VdsProperties.Device, VmDeviceType.DISK.getName()); + } } else { - drive.put(VdsProperties.Device, VmDeviceType.DISK.getName()); + drive.put(VdsProperties.Device, VmDeviceType.LUN.getName()); } - } - else { - drive.put(VdsProperties.Device, VmDeviceType.LUN.getName()); - } - drive.put(VdsProperties.Guid, lunDisk.getLun().getLUN_id()); - drive.put(VdsProperties.Format, VolumeFormat.RAW.toString().toLowerCase()); - drive.put(VdsProperties.PropagateErrors, PropagateErrors.Off.toString() - .toLowerCase()); + drive.put(VdsProperties.Guid, lunDisk.getLun().getLUN_id()); + drive.put(VdsProperties.Format, VolumeFormat.RAW.toString().toLowerCase()); + drive.put(VdsProperties.PropagateErrors, PropagateErrors.Off.toString() + .toLowerCase()); + break; + case CINDER: + CinderDisk cinderDisk = (CinderDisk) disk; + VmInfoBuilder.buildCinderDisk(cinderDisk, drive); + drive.put(VdsProperties.Device, VmDeviceType.DISK.getName()); + break; } return drive; -- To view, visit https://gerrit.ovirt.org/39658 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibe00f9e568a5ee0da1667bb8e57ac075cd5d03ed Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <de...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches