CLOUDSTACK-4362: always honor vCenter on-disk meta data to work with live migration better

This commit is contained in:
Kelven Yang 2013-08-30 11:10:56 -07:00
parent 281b94d587
commit e81e75c6b0

View File

@ -2969,13 +2969,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
throw new Exception("Primary datastore " + primaryStore.getUuid() + " is not mounted on host."); throw new Exception("Primary datastore " + primaryStore.getUuid() + " is not mounted on host.");
DatastoreMO dsMo = volumeDsDetails.second(); DatastoreMO dsMo = volumeDsDetails.second();
String datastoreDiskPath = VmwareStorageLayoutHelper.syncVolumeToVmDefaultFolder( // we will honor vCenter's meta if it exists
dcMo, vmMo.getName(), dsMo, volumeTO.getPath());
if(!dsMo.fileExists(datastoreDiskPath)) {
if(s_logger.isInfoEnabled())
s_logger.info("Volume " + volumeTO.getId() + " does not seem to exist on datastore, out of sync? path: " + datastoreDiskPath);
if(diskInfoBuilder != null && diskInfoBuilder.getDiskCount() > 0) { if(diskInfoBuilder != null && diskInfoBuilder.getDiskCount() > 0) {
// we will always on-disk info from vCenter in this case // we will always on-disk info from vCenter in this case
VirtualMachineDiskInfo diskInfo = diskInfoBuilder.getDiskInfoByDeviceBusName(deviceBusName); VirtualMachineDiskInfo diskInfo = diskInfoBuilder.getDiskInfoByDeviceBusName(deviceBusName);
@ -2990,6 +2984,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
} }
} }
String datastoreDiskPath = VmwareStorageLayoutHelper.syncVolumeToVmDefaultFolder(
dcMo, vmMo.getName(), dsMo, volumeTO.getPath());
if(!dsMo.fileExists(datastoreDiskPath)) {
if(s_logger.isInfoEnabled())
s_logger.info("Volume " + volumeTO.getId() + " does not seem to exist on datastore, out of sync? path: " + datastoreDiskPath);
// last resort, try chain info stored in DB // last resort, try chain info stored in DB
if(volumeTO.getChainInfo() != null) { if(volumeTO.getChainInfo() != null) {
VirtualMachineDiskInfo diskInfo = _gson.fromJson(volumeTO.getChainInfo(), VirtualMachineDiskInfo.class); VirtualMachineDiskInfo diskInfo = _gson.fromJson(volumeTO.getChainInfo(), VirtualMachineDiskInfo.class);