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);
|
String dataDiskController = details.get(VmDetailConstants.DATA_DISK_CONTROLLER);
|
||||||
if (StringUtils.isNotBlank(dataDiskController)) {
|
if (StringUtils.isNotBlank(dataDiskController)) {
|
||||||
LOGGER.debug("Passed custom disk controller for DATA disk " + dataDiskController);
|
LOGGER.debug("Passed custom disk controller for DATA disk {}", dataDiskController);
|
||||||
for (DiskDef.DiskBus bus : DiskDef.DiskBus.values()) {
|
DiskDef.DiskBus bus = DiskDef.DiskBus.fromValue(dataDiskController);
|
||||||
if (bus.toString().equalsIgnoreCase(dataDiskController)) {
|
if (bus != null) {
|
||||||
LOGGER.debug("Found matching enum for disk controller for DATA disk " + dataDiskController);
|
LOGGER.debug("Found matching enum for disk controller for DATA disk {}", dataDiskController);
|
||||||
return bus;
|
return bus;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -686,6 +686,15 @@ public class LibvirtVMDef {
|
||||||
_bus = bus;
|
_bus = bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static DiskBus fromValue(String bus) {
|
||||||
|
for (DiskBus b : DiskBus.values()) {
|
||||||
|
if (b.toString().equalsIgnoreCase(bus)) {
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return _bus;
|
return _bus;
|
||||||
|
|
|
||||||
|
|
@ -1320,26 +1320,27 @@ public class KVMStorageProcessor implements StorageProcessor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attaches or detaches a disk to an instance.
|
* Attaches or detaches a disk to an instance.
|
||||||
* @param conn libvirt connection
|
* @param conn libvirt connection
|
||||||
* @param attach boolean that determines whether the device will be attached or detached
|
* @param attach boolean that determines whether the device will be attached or detached
|
||||||
* @param vmName instance name
|
* @param vmName instance name
|
||||||
* @param attachingDisk kvm physical disk
|
* @param attachingDisk kvm physical disk
|
||||||
* @param devId device id in instance
|
* @param devId device id in instance
|
||||||
* @param serial
|
* @param serial
|
||||||
* @param bytesReadRate bytes read rate
|
* @param bytesReadRate bytes read rate
|
||||||
* @param bytesReadRateMax bytes read rate max
|
* @param bytesReadRateMax bytes read rate max
|
||||||
* @param bytesReadRateMaxLength bytes read rate max length
|
* @param bytesReadRateMaxLength bytes read rate max length
|
||||||
* @param bytesWriteRate bytes write rate
|
* @param bytesWriteRate bytes write rate
|
||||||
* @param bytesWriteRateMax bytes write rate amx
|
* @param bytesWriteRateMax bytes write rate amx
|
||||||
* @param bytesWriteRateMaxLength bytes write rate max length
|
* @param bytesWriteRateMaxLength bytes write rate max length
|
||||||
* @param iopsReadRate iops read rate
|
* @param iopsReadRate iops read rate
|
||||||
* @param iopsReadRateMax iops read rate max
|
* @param iopsReadRateMax iops read rate max
|
||||||
* @param iopsReadRateMaxLength iops read rate max length
|
* @param iopsReadRateMaxLength iops read rate max length
|
||||||
* @param iopsWriteRate iops write rate
|
* @param iopsWriteRate iops write rate
|
||||||
* @param iopsWriteRateMax iops write rate max
|
* @param iopsWriteRateMax iops write rate max
|
||||||
* @param iopsWriteRateMaxLength iops write rate max length
|
* @param iopsWriteRateMaxLength iops write rate max length
|
||||||
* @param cacheMode cache mode
|
* @param cacheMode cache mode
|
||||||
* @param encryptDetails encrypt details
|
* @param encryptDetails encrypt details
|
||||||
|
* @param controllerInfo
|
||||||
* @throws LibvirtException
|
* @throws LibvirtException
|
||||||
* @throws InternalErrorException
|
* @throws InternalErrorException
|
||||||
*/
|
*/
|
||||||
|
|
@ -1347,37 +1348,38 @@ public class KVMStorageProcessor implements StorageProcessor {
|
||||||
final String serial, final Long bytesReadRate, final Long bytesReadRateMax, final Long bytesReadRateMaxLength,
|
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 bytesWriteRate, final Long bytesWriteRateMax, final Long bytesWriteRateMaxLength, final Long iopsReadRate,
|
||||||
final Long iopsReadRateMax, final Long iopsReadRateMaxLength, final Long iopsWriteRate, final Long iopsWriteRateMax,
|
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 {
|
throws LibvirtException, InternalErrorException {
|
||||||
attachOrDetachDisk(conn, attach, vmName, attachingDisk, devId, serial, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength,
|
attachOrDetachDisk(conn, attach, vmName, attachingDisk, devId, serial, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength,
|
||||||
bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength, iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate,
|
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.
|
* Attaches or detaches a disk to an instance.
|
||||||
* @param conn libvirt connection
|
* @param conn libvirt connection
|
||||||
* @param attach boolean that determines whether the device will be attached or detached
|
* @param attach boolean that determines whether the device will be attached or detached
|
||||||
* @param vmName instance name
|
* @param vmName instance name
|
||||||
* @param attachingDisk kvm physical disk
|
* @param attachingDisk kvm physical disk
|
||||||
* @param devId device id in instance
|
* @param devId device id in instance
|
||||||
* @param serial
|
* @param serial
|
||||||
* @param bytesReadRate bytes read rate
|
* @param bytesReadRate bytes read rate
|
||||||
* @param bytesReadRateMax bytes read rate max
|
* @param bytesReadRateMax bytes read rate max
|
||||||
* @param bytesReadRateMaxLength bytes read rate max length
|
* @param bytesReadRateMaxLength bytes read rate max length
|
||||||
* @param bytesWriteRate bytes write rate
|
* @param bytesWriteRate bytes write rate
|
||||||
* @param bytesWriteRateMax bytes write rate amx
|
* @param bytesWriteRateMax bytes write rate amx
|
||||||
* @param bytesWriteRateMaxLength bytes write rate max length
|
* @param bytesWriteRateMaxLength bytes write rate max length
|
||||||
* @param iopsReadRate iops read rate
|
* @param iopsReadRate iops read rate
|
||||||
* @param iopsReadRateMax iops read rate max
|
* @param iopsReadRateMax iops read rate max
|
||||||
* @param iopsReadRateMaxLength iops read rate max length
|
* @param iopsReadRateMaxLength iops read rate max length
|
||||||
* @param iopsWriteRate iops write rate
|
* @param iopsWriteRate iops write rate
|
||||||
* @param iopsWriteRateMax iops write rate max
|
* @param iopsWriteRateMax iops write rate max
|
||||||
* @param iopsWriteRateMaxLength iops write rate max length
|
* @param iopsWriteRateMaxLength iops write rate max length
|
||||||
* @param cacheMode cache mode
|
* @param cacheMode cache mode
|
||||||
* @param encryptDetails encrypt details
|
* @param encryptDetails encrypt details
|
||||||
* @param waitDetachDevice value set in milliseconds to wait before assuming device removal failed
|
* @param waitDetachDevice value set in milliseconds to wait before assuming device removal failed
|
||||||
|
* @param controllerInfo
|
||||||
* @throws LibvirtException
|
* @throws LibvirtException
|
||||||
* @throws InternalErrorException
|
* @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 bytesWriteRate, final Long bytesWriteRateMax, final Long bytesWriteRateMaxLength, final Long iopsReadRate,
|
||||||
final Long iopsReadRateMax, final Long iopsReadRateMaxLength, final Long iopsWriteRate, final Long iopsWriteRateMax,
|
final Long iopsReadRateMax, final Long iopsReadRateMaxLength, final Long iopsWriteRate, final Long iopsWriteRateMax,
|
||||||
final Long iopsWriteRateMaxLength, final String cacheMode, final DiskDef.LibvirtDiskEncryptDetails encryptDetails,
|
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 {
|
throws LibvirtException, InternalErrorException {
|
||||||
|
|
||||||
List<DiskDef> disks = null;
|
List<DiskDef> disks = null;
|
||||||
|
|
@ -1423,17 +1425,7 @@ public class KVMStorageProcessor implements StorageProcessor {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DiskDef.DiskBus busT = DiskDef.DiskBus.VIRTIO;
|
DiskDef.DiskBus busT = getAttachDiskBusType(devId, disks, controllerInfo);
|
||||||
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 = new DiskDef();
|
diskdef = new DiskDef();
|
||||||
if (busT == DiskDef.DiskBus.SCSI || busT == DiskDef.DiskBus.VIRTIOBLK) {
|
if (busT == DiskDef.DiskBus.SCSI || busT == DiskDef.DiskBus.VIRTIOBLK) {
|
||||||
diskdef.setQemuDriver(true);
|
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
|
@Override
|
||||||
public Answer attachVolume(final AttachCommand cmd) {
|
public Answer attachVolume(final AttachCommand cmd) {
|
||||||
final DiskTO disk = cmd.getDisk();
|
final DiskTO disk = cmd.getDisk();
|
||||||
|
|
@ -1565,7 +1579,8 @@ public class KVMStorageProcessor implements StorageProcessor {
|
||||||
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
||||||
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
||||||
vol.getIopsReadRate(), vol.getIopsReadRateMax(), vol.getIopsReadRateMaxLength(),
|
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);
|
return new AttachAnswer(disk);
|
||||||
} catch (final LibvirtException e) {
|
} catch (final LibvirtException e) {
|
||||||
|
|
@ -1602,7 +1617,7 @@ public class KVMStorageProcessor implements StorageProcessor {
|
||||||
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
||||||
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
||||||
vol.getIopsReadRate(), vol.getIopsReadRateMax(), vol.getIopsReadRateMaxLength(),
|
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());
|
storagePoolMgr.disconnectPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue