You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2014/02/26 19:50:31 UTC
[44/50] [abbrv] git commit: updated refs/heads/acl-item-cidrs to
e90d595
CLOUDSTACK-6146. [VMware] [ESXi 5.5] Live storage migration of an already migrated volume fails
In vCenter 5.5, once a volume is migrated the VMDKs are renamed to match the name of the VM.
If a volume has been renamed upon migration update its volumePath to that of the new disk filename.
Conflicts:
plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/0926bf57
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/0926bf57
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/0926bf57
Branch: refs/heads/acl-item-cidrs
Commit: 0926bf57f468322fd1523325a5b45aa6a094debc
Parents: b484b48
Author: Likitha Shetty <li...@citrix.com>
Authored: Mon Feb 24 10:12:58 2014 +0530
Committer: Likitha Shetty <li...@citrix.com>
Committed: Wed Feb 26 13:45:43 2014 +0530
----------------------------------------------------------------------
.../vmware/resource/VmwareResource.java | 15 +++++++++++++--
.../hypervisor/vmware/mo/VirtualMachineMO.java | 18 ++++++++++++------
2 files changed, 25 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0926bf57/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
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 60c5909..3b631ac 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
@@ -3163,10 +3163,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
throw new Exception(msg);
}
- VmwareStorageLayoutHelper.getVmwareDatastorePathFromVmdkFileName(new DatastoreMO(srcHyperHost.getContext(), morDs), vmName, volumePath + ".vmdk");
+ DatastoreMO targetDsMo = new DatastoreMO(srcHyperHost.getContext(), morDs);
+ String fullVolumePath = VmwareStorageLayoutHelper.getVmwareDatastorePathFromVmdkFileName(targetDsMo, vmName, volumePath + ".vmdk");
+ int diskId = getVirtualDiskInfo(vmMo, volumePath + ".vmdk");
diskLocator = new VirtualMachineRelocateSpecDiskLocator();
diskLocator.setDatastore(morDs);
- diskLocator.setDiskId(getVirtualDiskInfo(vmMo, volumePath + ".vmdk"));
+ diskLocator.setDiskId(diskId);
diskLocators.add(diskLocator);
relocateSpec.getDisk().add(diskLocator);
@@ -3178,6 +3180,15 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
s_logger.debug("Successfully migrated volume " + volumePath + " to target datastore " + tgtDsName);
}
+ // Update and return volume path because that could have changed after migration
+ if (!targetDsMo.fileExists(fullVolumePath)) {
+ VirtualDisk[] disks = vmMo.getAllDiskDevice();
+ for (VirtualDisk disk : disks)
+ if (disk.getKey() == diskId) {
+ volumePath = vmMo.getVmdkFileBaseName(disk);
+ }
+ }
+
return new MigrateVolumeAnswer(cmd, true, null, volumePath);
} catch (Exception e) {
String msg = "Catch Exception " + e.getClass().getName() + " due to " + e.toString();
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0926bf57/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
----------------------------------------------------------------------
diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
index 7fc8836..3e83bb6 100644
--- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
+++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java
@@ -1800,17 +1800,23 @@ public class VirtualMachineMO extends BaseMO {
VirtualDevice[] devices = getAllDiskDevice();
for(VirtualDevice device : devices) {
if(device instanceof VirtualDisk) {
- VirtualDeviceBackingInfo backingInfo = ((VirtualDisk)device).getBacking();
- if(backingInfo instanceof VirtualDiskFlatVer2BackingInfo) {
- VirtualDiskFlatVer2BackingInfo diskBackingInfo = (VirtualDiskFlatVer2BackingInfo)backingInfo;
- DatastoreFile dsBackingFile = new DatastoreFile(diskBackingInfo.getFileName());
- vmdkFileBaseNames.add(dsBackingFile.getFileBaseName());
- }
+ vmdkFileBaseNames.add(getVmdkFileBaseName((VirtualDisk)device));
}
}
return vmdkFileBaseNames;
}
+ public String getVmdkFileBaseName(VirtualDisk disk) throws Exception {
+ String vmdkFileBaseName = null;
+ VirtualDeviceBackingInfo backingInfo = disk.getBacking();
+ if(backingInfo instanceof VirtualDiskFlatVer2BackingInfo) {
+ VirtualDiskFlatVer2BackingInfo diskBackingInfo = (VirtualDiskFlatVer2BackingInfo)backingInfo;
+ DatastoreFile dsBackingFile = new DatastoreFile(diskBackingInfo.getFileName());
+ vmdkFileBaseName = dsBackingFile.getFileBaseName();
+ }
+ return vmdkFileBaseName;
+ }
+
// this method relies on un-offical VMware API
@Deprecated
public void moveAllVmDiskFiles(DatastoreMO destDsMo, String destDsDir, boolean followDiskChain) throws Exception {