CLOUDSTACK-8119. [VMware] Cannot attach more than 8 volumes to a VM.

While attaching a new disk to an instance, the unit number on the controller key should be the lowest unit number
that is not in use. And in case the controller type is SCSI it shouln't be the reserved SCSI unit number.
This commit is contained in:
Likitha Shetty 2014-12-01 19:49:06 +05:30
parent ddcae8a930
commit f420dd55fb
2 changed files with 4 additions and 13 deletions

View File

@ -1018,8 +1018,6 @@ public class VirtualMachineMO extends BaseMO {
}
int deviceNumber = getNextDeviceNumber(controllerKey);
if (controllerKey != ideControllerKey && VmwareHelper.isReservedScsiDeviceNumber(deviceNumber))
deviceNumber++;
newDisk.setControllerKey(controllerKey);
newDisk.setKey(-deviceNumber);
@ -1858,8 +1856,6 @@ public class VirtualMachineMO extends BaseMO {
public int getNextScsiDiskDeviceNumber() throws Exception {
int scsiControllerKey = getScsiDeviceControllerKey();
int deviceNumber = getNextDeviceNumber(scsiControllerKey);
if (VmwareHelper.isReservedScsiDeviceNumber(deviceNumber))
deviceNumber++;
return deviceNumber;
}
@ -2319,6 +2315,7 @@ public class VirtualMachineMO extends BaseMO {
List<Integer> existingUnitNumbers = new ArrayList<Integer>();
int deviceNumber = 0;
int ideControllerKey = getIDEDeviceControllerKey();
if (devices != null && devices.size() > 0) {
for (VirtualDevice device : devices) {
if (device.getControllerKey() != null && device.getControllerKey().intValue() == controllerKey) {
@ -2327,8 +2324,10 @@ public class VirtualMachineMO extends BaseMO {
}
}
while (true) {
// Next device number should be the lowest device number on the key that is not in use and is not reserved.
if (!existingUnitNumbers.contains(Integer.valueOf(deviceNumber))) {
break;
if (controllerKey != ideControllerKey && !VmwareHelper.isReservedScsiDeviceNumber(deviceNumber))
break;
}
++deviceNumber;
}

View File

@ -188,8 +188,6 @@ public class VmwareHelper {
controllerKey = ideControllerKey;
if (deviceNumber < 0) {
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber))
deviceNumber++;
}
disk.setControllerKey(controllerKey);
@ -261,8 +259,6 @@ public class VmwareHelper {
disk.setControllerKey(controllerKey);
if (deviceNumber < 0) {
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber))
deviceNumber++;
}
disk.setKey(-contextNumber);
@ -300,8 +296,6 @@ public class VmwareHelper {
controllerKey = ideControllerKey;
if (deviceNumber < 0) {
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber))
deviceNumber++;
}
disk.setControllerKey(controllerKey);
@ -354,8 +348,6 @@ public class VmwareHelper {
controllerKey = ideControllerKey;
if (deviceNumber < 0) {
deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
if (controllerKey != ideControllerKey && isReservedScsiDeviceNumber(deviceNumber))
deviceNumber++;
}
disk.setControllerKey(controllerKey);