diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 60007e390ee..7474d5c8327 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1999,12 +1999,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa private VirtualMachineDiskInfo getMatchingExistingDisk(VirtualMachineDiskInfoBuilder diskInfoBuilder, DiskTO vol) { if (diskInfoBuilder != null) { VolumeObjectTO volume = (VolumeObjectTO)vol.getData(); + String dsName = volume.getDataStore().getUuid().replace("-", ""); Map details = vol.getDetails(); boolean isManaged = details != null && Boolean.parseBoolean(details.get(DiskTO.MANAGED)); VirtualMachineDiskInfo diskInfo = - diskInfoBuilder.getDiskInfoByBackingFileBaseName(isManaged ? new DatastoreFile(volume.getPath()).getFileBaseName() : volume.getPath()); + diskInfoBuilder.getDiskInfoByBackingFileBaseName(isManaged ? new DatastoreFile(volume.getPath()).getFileBaseName() : volume.getPath(), dsName); if (diskInfo != null) { s_logger.info("Found existing disk info from volume path: " + volume.getPath()); return diskInfo; @@ -2017,7 +2018,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (disks.length > 0) { for (String diskPath : disks) { DatastoreFile file = new DatastoreFile(diskPath); - diskInfo = diskInfoBuilder.getDiskInfoByBackingFileBaseName(file.getFileBaseName()); + diskInfo = diskInfoBuilder.getDiskInfoByBackingFileBaseName(file.getFileBaseName(), dsName); if (diskInfo != null) { s_logger.info("Found existing disk from chain info: " + diskPath); return diskInfo; diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineDiskInfoBuilder.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineDiskInfoBuilder.java index 9e9fa8988a4..ba0a3ea9f25 100644 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineDiskInfoBuilder.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineDiskInfoBuilder.java @@ -61,9 +61,9 @@ public class VirtualMachineDiskInfoBuilder { return null; } - public VirtualMachineDiskInfo getDiskInfoByBackingFileBaseName(String diskBackingFileBaseName) { + public VirtualMachineDiskInfo getDiskInfoByBackingFileBaseName(String diskBackingFileBaseName, String dataStoreName) { for (Map.Entry> entry : disks.entrySet()) { - if (chainContains(entry.getValue(), diskBackingFileBaseName)) { + if (chainContains(entry.getValue(), diskBackingFileBaseName, dataStoreName)) { VirtualMachineDiskInfo diskInfo = new VirtualMachineDiskInfo(); diskInfo.setDiskDeviceBusName(entry.getKey()); diskInfo.setDiskChain(entry.getValue().toArray(new String[1])); @@ -84,11 +84,11 @@ public class VirtualMachineDiskInfoBuilder { return chain; } - private static boolean chainContains(List chain, String diskBackingFileBaseName) { + private static boolean chainContains(List chain, String diskBackingFileBaseName, String dataStoreName) { for (String backing : chain) { DatastoreFile file = new DatastoreFile(backing); - - if (file.getFileBaseName().equals(diskBackingFileBaseName)) + // Ensure matching disk exists in the right datastore + if (file.getFileBaseName().equals(diskBackingFileBaseName) && backing.contains(dataStoreName)) return true; }