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

Reply via email to