bug 11296 : merge fix from 2.2.10

This commit is contained in:
Kelven Yang 2011-09-01 11:56:10 -07:00
parent 5e1886ee35
commit cddd117e99
2 changed files with 25 additions and 19 deletions

View File

@ -1269,14 +1269,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
} }
VirtualDevice nic; VirtualDevice nic;
int nicDeviceNumber = -1;
for (NicTO nicTo : sortNicsByDeviceId(nics)) { for (NicTO nicTo : sortNicsByDeviceId(nics)) {
s_logger.info("Prepare NIC device based on NicTO: " + _gson.toJson(nicTo)); s_logger.info("Prepare NIC device based on NicTO: " + _gson.toJson(nicTo));
Pair<ManagedObjectReference, String> networkInfo = prepareNetworkFromNicInfo(vmMo.getRunningHost(), nicTo); Pair<ManagedObjectReference, String> networkInfo = prepareNetworkFromNicInfo(vmMo.getRunningHost(), nicTo);
nic = VmwareHelper.prepareNicDevice(vmMo, networkInfo.first(), mgr.getGuestNicDeviceType(), networkInfo.second(), nicTo.getMac(), nicDeviceNumber, i + 1, true, true); nic = VmwareHelper.prepareNicDevice(vmMo, networkInfo.first(), mgr.getGuestNicDeviceType(), networkInfo.second(), nicTo.getMac(), i, i + 1, true, true);
nicDeviceNumber = nic.getUnitNumber() + 1;
deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec();
deviceConfigSpecArray[i].setDevice(nic); deviceConfigSpecArray[i].setDevice(nic);
deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add);
@ -3179,7 +3177,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
if (s_logger.isDebugEnabled()) { if (s_logger.isDebugEnabled()) {
s_logger.debug("VM " + vm + " is now missing from host report but we detected that it might be migrated to other host by vCenter"); s_logger.debug("VM " + vm + " is now missing from host report but we detected that it might be migrated to other host by vCenter");
} }
if(oldState != State.Starting && oldState != State.Migrating) {
s_logger.debug("VM " + vm + " is now missing from host report and VM is not at starting state, remove it from host VM-sync map");
_vms.remove(vm); _vms.remove(vm);
} else {
s_logger.debug("VM " + vm + " is missing from host report, but we will ignore VM " + vm + " in transition state " + oldState);
}
continue; continue;
} }

View File

@ -93,10 +93,12 @@ public class VmwareHelper {
nic.setAddressType("Manual"); nic.setAddressType("Manual");
nic.setConnectable(connectInfo); nic.setConnectable(connectInfo);
nic.setMacAddress(macAddress); nic.setMacAddress(macAddress);
nic.setControllerKey(vmMo.getPCIDeviceControllerKey());
/*
nic.setControllerKey(vmMo.getPCIDeviceControllerKey());
if(deviceNumber < 0) if(deviceNumber < 0)
deviceNumber = vmMo.getNextPCIDeviceNumber(); deviceNumber = vmMo.getNextPCIDeviceNumber();
*/
nic.setUnitNumber(deviceNumber); nic.setUnitNumber(deviceNumber);
nic.setKey(-contextNumber); nic.setKey(-contextNumber);
return nic; return nic;
@ -106,9 +108,6 @@ public class VmwareHelper {
public static VirtualDevice prepareDiskDevice(VirtualMachineMO vmMo, int controllerKey, String vmdkDatastorePath, public static VirtualDevice prepareDiskDevice(VirtualMachineMO vmMo, int controllerKey, String vmdkDatastorePath,
int sizeInMb, ManagedObjectReference morDs, int deviceNumber, int contextNumber) throws Exception { int sizeInMb, ManagedObjectReference morDs, int deviceNumber, int contextNumber) throws Exception {
if(controllerKey < 0)
controllerKey = vmMo.getIDEDeviceControllerKey();
VirtualDisk disk = new VirtualDisk(); VirtualDisk disk = new VirtualDisk();
VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo(); VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo();
@ -119,9 +118,12 @@ public class VmwareHelper {
backingInfo.setFileName(vmdkDatastorePath); backingInfo.setFileName(vmdkDatastorePath);
disk.setBacking(backingInfo); disk.setBacking(backingInfo);
if(controllerKey < 0)
controllerKey = vmMo.getIDEDeviceControllerKey();
if(deviceNumber < 0) if(deviceNumber < 0)
deviceNumber = vmMo.getNextDeviceNumber(controllerKey); deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
disk.setControllerKey(controllerKey); disk.setControllerKey(controllerKey);
disk.setKey(-contextNumber); disk.setKey(-contextNumber);
disk.setUnitNumber(deviceNumber); disk.setUnitNumber(deviceNumber);
disk.setCapacityInKB(sizeInMb*1024); disk.setCapacityInKB(sizeInMb*1024);
@ -187,9 +189,9 @@ public class VmwareHelper {
if(controllerKey < 0) if(controllerKey < 0)
controllerKey = vmMo.getIDEDeviceControllerKey(); controllerKey = vmMo.getIDEDeviceControllerKey();
disk.setControllerKey(controllerKey); disk.setControllerKey(controllerKey);
if(deviceNumber < 0) if(deviceNumber < 0)
deviceNumber = vmMo.getNextDeviceNumber(controllerKey); deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
disk.setKey(-contextNumber); disk.setKey(-contextNumber);
disk.setUnitNumber(deviceNumber); disk.setUnitNumber(deviceNumber);
disk.setCapacityInKB(sizeInMb*1024); disk.setCapacityInKB(sizeInMb*1024);
@ -208,9 +210,6 @@ public class VmwareHelper {
assert(vmdkDatastorePathChain != null); assert(vmdkDatastorePathChain != null);
assert(vmdkDatastorePathChain.length >= 1); assert(vmdkDatastorePathChain.length >= 1);
if(controllerKey < 0)
controllerKey = vmMo.getIDEDeviceControllerKey();
VirtualDisk disk = new VirtualDisk(); VirtualDisk disk = new VirtualDisk();
VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo(); VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo();
@ -227,6 +226,8 @@ public class VmwareHelper {
disk.setBacking(backingInfo); disk.setBacking(backingInfo);
if(controllerKey < 0)
controllerKey = vmMo.getIDEDeviceControllerKey();
if(deviceNumber < 0) if(deviceNumber < 0)
deviceNumber = vmMo.getNextDeviceNumber(controllerKey); deviceNumber = vmMo.getNextDeviceNumber(controllerKey);
@ -268,11 +269,12 @@ public class VmwareHelper {
if(cdRom == null) { if(cdRom == null) {
newCdRom = true; newCdRom = true;
cdRom = new VirtualCdrom(); cdRom = new VirtualCdrom();
assert(vmMo.getIDEDeviceControllerKey() >= 0); assert(vmMo.getIDEDeviceControllerKey() >= 0);
cdRom.setControllerKey(vmMo.getIDEDeviceControllerKey()); cdRom.setControllerKey(vmMo.getIDEDeviceControllerKey());
if(deviceNumber < 0) if(deviceNumber < 0)
deviceNumber = vmMo.getNextIDEDeviceNumber(); deviceNumber = vmMo.getNextIDEDeviceNumber();
cdRom.setUnitNumber(deviceNumber); cdRom.setUnitNumber(deviceNumber);
cdRom.setKey(-contextNumber); cdRom.setKey(-contextNumber);
} }