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


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

Branch: refs/heads/master
Commit: e81e75c6b047a0fd9746e239e15adf25e4a15c71
Parents: 281b94d
Author: Kelven Yang <[email protected]>
Authored: Fri Aug 30 11:10:56 2013 -0700
Committer: Kelven Yang <[email protected]>
Committed: Wed Sep 4 14:49:46 2013 -0700

----------------------------------------------------------------------
 .../vmware/resource/VmwareResource.java         | 34 ++++++++++----------
 1 file changed, 17 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e81e75c6/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 96abe1f..a548ceb 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
@@ -2969,27 +2969,27 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
                throw new Exception("Primary datastore " + 
primaryStore.getUuid() + " is not mounted on host.");
         DatastoreMO dsMo = volumeDsDetails.second();
 
+        // we will honor vCenter's meta if it exists
+        if(diskInfoBuilder != null && diskInfoBuilder.getDiskCount() > 0) {
+               // we will always on-disk info from vCenter in this case
+               VirtualMachineDiskInfo diskInfo = 
diskInfoBuilder.getDiskInfoByDeviceBusName(deviceBusName);
+               if(diskInfo != null) {
+                       if(s_logger.isInfoEnabled())
+                               s_logger.info("Volume " + volumeTO.getId() + " 
does not seem to exist on datastore. use on-disk chain: " + 
+                                       _gson.toJson(diskInfo));
+                       
+                       return diskInfo.getDiskChain();
+               } else {
+                       s_logger.warn("Volume " + volumeTO.getId() + " does not 
seem to exist on datastore. on-disk may be out of sync as well. disk device 
info: " + deviceBusName);
+               }
+        }
+        
         String datastoreDiskPath = 
VmwareStorageLayoutHelper.syncVolumeToVmDefaultFolder(
-               dcMo, vmMo.getName(), dsMo, volumeTO.getPath());
-
+               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) {
-               // we will always on-disk info from vCenter in this case
-               VirtualMachineDiskInfo diskInfo = 
diskInfoBuilder.getDiskInfoByDeviceBusName(deviceBusName);
-               if(diskInfo != null) {
-                       if(s_logger.isInfoEnabled())
-                               s_logger.info("Volume " + volumeTO.getId() + " 
does not seem to exist on datastore. use on-disk chain: " + 
-                                       _gson.toJson(diskInfo));
-                       
-                       return diskInfo.getDiskChain();
-               } else {
-                       s_logger.warn("Volume " + volumeTO.getId() + " does not 
seem to exist on datastore. on-disk may be out of sync as well. disk device 
info: " + deviceBusName);
-               }
-            }
-            
             // last resort, try chain info stored in DB
             if(volumeTO.getChainInfo() != null) {
                VirtualMachineDiskInfo diskInfo = 
_gson.fromJson(volumeTO.getChainInfo(), VirtualMachineDiskInfo.class);
@@ -2999,7 +2999,7 @@ public class VmwareResource implements 
StoragePoolResource, ServerResource, Vmwa
                }
                
                throw new Exception("Volume " + volumeTO.getId() + " does not 
seem to exist on datastore. Broken disk chain");
-            }
+               }
        }
         
        return new String[] { datastoreDiskPath }; 

Reply via email to