CLOUDSTACK-3237: pass disk file name instead of full datastore path when 
setting up storage relocation specin order to safely locate the disk device


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c6dfb33d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c6dfb33d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c6dfb33d

Branch: refs/heads/master
Commit: c6dfb33d9f2c74f2e508ecafec737d1c849a5577
Parents: dbe4e13
Author: Kelven Yang <[email protected]>
Authored: Fri Aug 9 17:27:26 2013 -0700
Committer: Kelven Yang <[email protected]>
Committed: Wed Sep 4 14:49:45 2013 -0700

----------------------------------------------------------------------
 .../vmware/resource/VmwareResource.java         | 13 +++++++----
 .../resource/VmwareStorageLayoutHelper.java     | 23 ++++++++++++++++++++
 2 files changed, 32 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c6dfb33d/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 af6026b..70b5bf0 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
@@ -3954,10 +3954,13 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
                     relocateSpec.setDatastore(morDsAtSource);
                     isFirstDs = false;
                 }
-                srcDiskName = String.format("[%s] %s.vmdk", srcDsName, 
volume.getPath());
+                srcDiskName = 
VmwareStorageLayoutHelper.getVmwareDatastorePathFromVmdkFileName(
+                       new DatastoreMO(srcHyperHost.getContext(), 
morDsAtSource), 
+                       vmName, 
+                       volume.getPath() + ".vmdk");
                 diskLocator = new VirtualMachineRelocateSpecDiskLocator();
                 diskLocator.setDatastore(morDsAtSource);
-                diskLocator.setDiskId(getVirtualDiskInfo(vmMo, srcDiskName));
+                diskLocator.setDiskId(getVirtualDiskInfo(vmMo, 
volume.getPath() + ".vmdk"));
 
                 diskLocators.add(diskLocator);
 
@@ -4075,10 +4078,12 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
                 throw new Exception(msg);
             }
 
-            srcDiskName = String.format("[%s] %s.vmdk", srcDsName, volumePath);
+            srcDiskName = 
VmwareStorageLayoutHelper.getVmwareDatastorePathFromVmdkFileName(
+               new DatastoreMO(srcHyperHost.getContext(), morDs), vmName, 
+               volumePath + ".vmdk");
             diskLocator = new VirtualMachineRelocateSpecDiskLocator();
             diskLocator.setDatastore(morDs);
-            diskLocator.setDiskId(getVirtualDiskInfo(vmMo, srcDiskName));
+            diskLocator.setDiskId(getVirtualDiskInfo(vmMo, volumePath + 
".vmdk"));
 
             diskLocators.add(diskLocator);
             relocateSpec.getDisk().add(diskLocator);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c6dfb33d/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageLayoutHelper.java
----------------------------------------------------------------------
diff --git 
a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageLayoutHelper.java
 
b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageLayoutHelper.java
index b41b72a..c61f15e 100644
--- 
a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageLayoutHelper.java
+++ 
b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageLayoutHelper.java
@@ -64,6 +64,29 @@ public class VmwareStorageLayoutHelper {
        return null;
     }
     
+    public static String findVolumeDatastoreFullPath(DatastoreMO dsMo, String 
vmName, String vmdkFileName) throws Exception {
+       if(vmName != null) {
+               String path = getVmwareDatastorePathFromVmdkFileName(dsMo, 
vmName, vmdkFileName);
+               if(!dsMo.fileExists(path)) {
+                       path = getLegacyDatastorePathFromVmdkFileName(dsMo, 
vmdkFileName);
+                       
+                       // to save one call to vCenter, we won't check file 
existence for this round, so the caller
+                       // may still fail with exception, but if that's case, 
we will let it fail anyway
+               }
+               return path;
+       } else {
+                       String path = 
getLegacyDatastorePathFromVmdkFileName(dsMo, vmdkFileName);
+               if(!dsMo.fileExists(path)) {
+                       // Datastore file movement is not atomic operations, we 
need to sync and repair
+                       path = dsMo.searchFileInSubFolders(vmdkFileName, false);
+
+                       // to save one call to vCenter, we won't check file 
existence for this round, so the caller
+                       // may still fail with exception, but if that's case, 
we will let it fail anyway
+               }
+               return path;
+       }
+    }
+    
     public static String syncVolumeToVmDefaultFolder(DatacenterMO dcMo, String 
vmName, 
        DatastoreMO ds, String vmdkName) throws Exception {
        

Reply via email to