mirror of https://github.com/apache/cloudstack.git
Merge 3e908f8a1b into bce3e54a7e
This commit is contained in:
commit
d4c0ee4c7a
|
|
@ -4371,12 +4371,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
|
||||
String dataDiskController = details.get(VmDetailConstants.DATA_DISK_CONTROLLER);
|
||||
if (StringUtils.isNotBlank(dataDiskController)) {
|
||||
LOGGER.debug("Passed custom disk controller for DATA disk " + dataDiskController);
|
||||
for (DiskDef.DiskBus bus : DiskDef.DiskBus.values()) {
|
||||
if (bus.toString().equalsIgnoreCase(dataDiskController)) {
|
||||
LOGGER.debug("Found matching enum for disk controller for DATA disk " + dataDiskController);
|
||||
return bus;
|
||||
}
|
||||
LOGGER.debug("Passed custom disk controller for DATA disk {}", dataDiskController);
|
||||
DiskDef.DiskBus bus = DiskDef.DiskBus.fromValue(dataDiskController);
|
||||
if (bus != null) {
|
||||
LOGGER.debug("Found matching enum for disk controller for DATA disk {}", dataDiskController);
|
||||
return bus;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -686,6 +686,15 @@ public class LibvirtVMDef {
|
|||
_bus = bus;
|
||||
}
|
||||
|
||||
public static DiskBus fromValue(String bus) {
|
||||
for (DiskBus b : DiskBus.values()) {
|
||||
if (b.toString().equalsIgnoreCase(bus)) {
|
||||
return b;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return _bus;
|
||||
|
|
|
|||
|
|
@ -1320,26 +1320,27 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||
|
||||
/**
|
||||
* Attaches or detaches a disk to an instance.
|
||||
* @param conn libvirt connection
|
||||
* @param attach boolean that determines whether the device will be attached or detached
|
||||
* @param vmName instance name
|
||||
* @param attachingDisk kvm physical disk
|
||||
* @param devId device id in instance
|
||||
* @param conn libvirt connection
|
||||
* @param attach boolean that determines whether the device will be attached or detached
|
||||
* @param vmName instance name
|
||||
* @param attachingDisk kvm physical disk
|
||||
* @param devId device id in instance
|
||||
* @param serial
|
||||
* @param bytesReadRate bytes read rate
|
||||
* @param bytesReadRateMax bytes read rate max
|
||||
* @param bytesReadRateMaxLength bytes read rate max length
|
||||
* @param bytesWriteRate bytes write rate
|
||||
* @param bytesWriteRateMax bytes write rate amx
|
||||
* @param bytesReadRate bytes read rate
|
||||
* @param bytesReadRateMax bytes read rate max
|
||||
* @param bytesReadRateMaxLength bytes read rate max length
|
||||
* @param bytesWriteRate bytes write rate
|
||||
* @param bytesWriteRateMax bytes write rate amx
|
||||
* @param bytesWriteRateMaxLength bytes write rate max length
|
||||
* @param iopsReadRate iops read rate
|
||||
* @param iopsReadRateMax iops read rate max
|
||||
* @param iopsReadRateMaxLength iops read rate max length
|
||||
* @param iopsWriteRate iops write rate
|
||||
* @param iopsWriteRateMax iops write rate max
|
||||
* @param iopsWriteRateMaxLength iops write rate max length
|
||||
* @param cacheMode cache mode
|
||||
* @param encryptDetails encrypt details
|
||||
* @param iopsReadRate iops read rate
|
||||
* @param iopsReadRateMax iops read rate max
|
||||
* @param iopsReadRateMaxLength iops read rate max length
|
||||
* @param iopsWriteRate iops write rate
|
||||
* @param iopsWriteRateMax iops write rate max
|
||||
* @param iopsWriteRateMaxLength iops write rate max length
|
||||
* @param cacheMode cache mode
|
||||
* @param encryptDetails encrypt details
|
||||
* @param controllerInfo
|
||||
* @throws LibvirtException
|
||||
* @throws InternalErrorException
|
||||
*/
|
||||
|
|
@ -1347,37 +1348,38 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||
final String serial, final Long bytesReadRate, final Long bytesReadRateMax, final Long bytesReadRateMaxLength,
|
||||
final Long bytesWriteRate, final Long bytesWriteRateMax, final Long bytesWriteRateMaxLength, final Long iopsReadRate,
|
||||
final Long iopsReadRateMax, final Long iopsReadRateMaxLength, final Long iopsWriteRate, final Long iopsWriteRateMax,
|
||||
final Long iopsWriteRateMaxLength, final String cacheMode, final DiskDef.LibvirtDiskEncryptDetails encryptDetails, Map<String, String> details)
|
||||
final Long iopsWriteRateMaxLength, final String cacheMode, final DiskDef.LibvirtDiskEncryptDetails encryptDetails, Map<String, String> details, Map<String, String> controllerInfo)
|
||||
throws LibvirtException, InternalErrorException {
|
||||
attachOrDetachDisk(conn, attach, vmName, attachingDisk, devId, serial, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength,
|
||||
bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength, iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate,
|
||||
iopsWriteRateMax, iopsWriteRateMaxLength, cacheMode, encryptDetails, 0l, details);
|
||||
iopsWriteRateMax, iopsWriteRateMaxLength, cacheMode, encryptDetails, 0l, details, controllerInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Attaches or detaches a disk to an instance.
|
||||
* @param conn libvirt connection
|
||||
* @param attach boolean that determines whether the device will be attached or detached
|
||||
* @param vmName instance name
|
||||
* @param attachingDisk kvm physical disk
|
||||
* @param devId device id in instance
|
||||
* @param conn libvirt connection
|
||||
* @param attach boolean that determines whether the device will be attached or detached
|
||||
* @param vmName instance name
|
||||
* @param attachingDisk kvm physical disk
|
||||
* @param devId device id in instance
|
||||
* @param serial
|
||||
* @param bytesReadRate bytes read rate
|
||||
* @param bytesReadRateMax bytes read rate max
|
||||
* @param bytesReadRateMaxLength bytes read rate max length
|
||||
* @param bytesWriteRate bytes write rate
|
||||
* @param bytesWriteRateMax bytes write rate amx
|
||||
* @param bytesReadRate bytes read rate
|
||||
* @param bytesReadRateMax bytes read rate max
|
||||
* @param bytesReadRateMaxLength bytes read rate max length
|
||||
* @param bytesWriteRate bytes write rate
|
||||
* @param bytesWriteRateMax bytes write rate amx
|
||||
* @param bytesWriteRateMaxLength bytes write rate max length
|
||||
* @param iopsReadRate iops read rate
|
||||
* @param iopsReadRateMax iops read rate max
|
||||
* @param iopsReadRateMaxLength iops read rate max length
|
||||
* @param iopsWriteRate iops write rate
|
||||
* @param iopsWriteRateMax iops write rate max
|
||||
* @param iopsWriteRateMaxLength iops write rate max length
|
||||
* @param cacheMode cache mode
|
||||
* @param encryptDetails encrypt details
|
||||
* @param waitDetachDevice value set in milliseconds to wait before assuming device removal failed
|
||||
* @param iopsReadRate iops read rate
|
||||
* @param iopsReadRateMax iops read rate max
|
||||
* @param iopsReadRateMaxLength iops read rate max length
|
||||
* @param iopsWriteRate iops write rate
|
||||
* @param iopsWriteRateMax iops write rate max
|
||||
* @param iopsWriteRateMaxLength iops write rate max length
|
||||
* @param cacheMode cache mode
|
||||
* @param encryptDetails encrypt details
|
||||
* @param waitDetachDevice value set in milliseconds to wait before assuming device removal failed
|
||||
* @param controllerInfo
|
||||
* @throws LibvirtException
|
||||
* @throws InternalErrorException
|
||||
*/
|
||||
|
|
@ -1386,7 +1388,7 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||
final Long bytesWriteRate, final Long bytesWriteRateMax, final Long bytesWriteRateMaxLength, final Long iopsReadRate,
|
||||
final Long iopsReadRateMax, final Long iopsReadRateMaxLength, final Long iopsWriteRate, final Long iopsWriteRateMax,
|
||||
final Long iopsWriteRateMaxLength, final String cacheMode, final DiskDef.LibvirtDiskEncryptDetails encryptDetails,
|
||||
long waitDetachDevice, Map<String, String> details)
|
||||
long waitDetachDevice, Map<String, String> details, Map<String, String> controllerInfo)
|
||||
throws LibvirtException, InternalErrorException {
|
||||
|
||||
List<DiskDef> disks = null;
|
||||
|
|
@ -1423,17 +1425,7 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||
return;
|
||||
}
|
||||
} else {
|
||||
DiskDef.DiskBus busT = DiskDef.DiskBus.VIRTIO;
|
||||
for (final DiskDef disk : disks) {
|
||||
if (disk.getDeviceType() == DeviceType.DISK) {
|
||||
if (disk.getBusType() == DiskDef.DiskBus.SCSI) {
|
||||
busT = DiskDef.DiskBus.SCSI;
|
||||
} else if (disk.getBusType() == DiskDef.DiskBus.VIRTIOBLK) {
|
||||
busT = DiskDef.DiskBus.VIRTIOBLK;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
DiskDef.DiskBus busT = getAttachDiskBusType(devId, disks, controllerInfo);
|
||||
diskdef = new DiskDef();
|
||||
if (busT == DiskDef.DiskBus.SCSI || busT == DiskDef.DiskBus.VIRTIOBLK) {
|
||||
diskdef.setQemuDriver(true);
|
||||
|
|
@ -1538,6 +1530,28 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||
}
|
||||
}
|
||||
|
||||
protected DiskDef.DiskBus getAttachDiskBusType(int deviceId, List<DiskDef> disks, Map<String, String> controllerInfo) {
|
||||
String controllerKey = deviceId == 0 ? VmDetailConstants.ROOT_DISK_CONTROLLER : VmDetailConstants.DATA_DISK_CONTROLLER;
|
||||
String diskController = MapUtils.getString(controllerInfo, controllerKey);
|
||||
DiskDef.DiskBus busType = DiskDef.DiskBus.fromValue(diskController);
|
||||
if (diskController != null) {
|
||||
logger.debug("Using controller '{}' from command specified as {} while attaching disk (deviceId={})",
|
||||
diskController, controllerKey, deviceId);
|
||||
return busType;
|
||||
}
|
||||
for (final DiskDef disk : disks) {
|
||||
if (disk.getDeviceType() != DeviceType.DISK) {
|
||||
continue;
|
||||
}
|
||||
if (disk.getBusType() == DiskDef.DiskBus.SCSI) {
|
||||
return DiskDef.DiskBus.SCSI;
|
||||
} else if (disk.getBusType() == DiskDef.DiskBus.VIRTIOBLK) {
|
||||
return DiskDef.DiskBus.VIRTIOBLK;
|
||||
}
|
||||
}
|
||||
return DiskDef.DiskBus.VIRTIO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Answer attachVolume(final AttachCommand cmd) {
|
||||
final DiskTO disk = cmd.getDisk();
|
||||
|
|
@ -1565,7 +1579,8 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
||||
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
||||
vol.getIopsReadRate(), vol.getIopsReadRateMax(), vol.getIopsReadRateMaxLength(),
|
||||
vol.getIopsWriteRate(), vol.getIopsWriteRateMax(), vol.getIopsWriteRateMaxLength(), volCacheMode, encryptDetails, disk.getDetails());
|
||||
vol.getIopsWriteRate(), vol.getIopsWriteRateMax(), vol.getIopsWriteRateMaxLength(), volCacheMode,
|
||||
encryptDetails, disk.getDetails(), cmd.getControllerInfo());
|
||||
|
||||
return new AttachAnswer(disk);
|
||||
} catch (final LibvirtException e) {
|
||||
|
|
@ -1602,7 +1617,7 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
||||
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
||||
vol.getIopsReadRate(), vol.getIopsReadRateMax(), vol.getIopsReadRateMaxLength(),
|
||||
vol.getIopsWriteRate(), vol.getIopsWriteRateMax(), vol.getIopsWriteRateMaxLength(), volCacheMode, null, waitDetachDevice, null);
|
||||
vol.getIopsWriteRate(), vol.getIopsWriteRateMax(), vol.getIopsWriteRateMaxLength(), volCacheMode, null, waitDetachDevice, null, null);
|
||||
|
||||
storagePoolMgr.disconnectPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue