cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mc...@apache.org
Subject git commit: updated refs/heads/4.2 to e87b167
Date Wed, 07 Aug 2013 18:14:24 GMT
Updated Branches:
  refs/heads/4.2 c657243f1 -> e87b1679c


CLOUDSTACK-3568: [Automation]Parallel deployment - Vmware - When
deploying 30 parallel Vms , we see ~15 Vms fail in
org.apache.cloudstack.storage.command.CopyCommand.

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

Branch: refs/heads/4.2
Commit: e87b1679cdc92bc3432b2751581be3fbdbdf0119
Parents: c657243
Author: Min Chen <min.chen@citrix.com>
Authored: Wed Aug 7 11:13:56 2013 -0700
Committer: Min Chen <min.chen@citrix.com>
Committed: Wed Aug 7 11:13:56 2013 -0700

----------------------------------------------------------------------
 .../cloudstack/storage/command/CopyCommand.java |  18 +-
 .../resource/VmwareStorageProcessor.java        | 210 ++++++++++---------
 2 files changed, 128 insertions(+), 100 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e87b1679/engine/api/src/org/apache/cloudstack/storage/command/CopyCommand.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/storage/command/CopyCommand.java b/engine/api/src/org/apache/cloudstack/storage/command/CopyCommand.java
index 629fafe..73c2c7e 100644
--- a/engine/api/src/org/apache/cloudstack/storage/command/CopyCommand.java
+++ b/engine/api/src/org/apache/cloudstack/storage/command/CopyCommand.java
@@ -16,8 +16,13 @@
 // under the License.
 package org.apache.cloudstack.storage.command;
 
+import org.apache.cloudstack.storage.to.TemplateObjectTO;
+import org.apache.cloudstack.storage.to.VolumeObjectTO;
+
 import com.cloud.agent.api.Command;
 import com.cloud.agent.api.to.DataTO;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.DataStoreRole;
 
 public final class CopyCommand extends Command implements StorageSubSystemCommand {
     private DataTO srcTO;
@@ -31,7 +36,18 @@ public final class CopyCommand extends Command implements StorageSubSystemComman
         this.srcTO = srcData;
         this.destTO = destData;
         this.setWait(timeout);
-        this.executeInSequence = executeInSequence;
+        this.executeInSequence = executeInSequence; // default is to run in parallel, so
false here
+        // special handling for vmware parallel vm deployment bug https://issues.apache.org/jira/browse/CLOUDSTACK-3568
+        if (srcTO instanceof TemplateObjectTO && destTO instanceof VolumeObjectTO)
{
+            // create a volume wrapper vm from a template on primary storage
+            TemplateObjectTO srcTmplt = (TemplateObjectTO) srcTO;
+            VolumeObjectTO destVol = (VolumeObjectTO) destTO;
+            if (srcTmplt.getHypervisorType() == HypervisorType.VMware && srcTmplt.getDataStore().getRole()
== DataStoreRole.Primary
+                    && destVol.getDataStore().getRole() == DataStoreRole.Primary)
{
+                this.executeInSequence = true;
+            }
+        }
+
     }
 
     public DataTO getDestTO() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e87b1679/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
index 5f2d07f..217dbd9 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java
@@ -32,16 +32,8 @@ import org.apache.log4j.Logger;
 
 import com.google.gson.Gson;
 import com.vmware.vim25.ManagedObjectReference;
-import com.vmware.vim25.VirtualDeviceConfigSpec;
-import com.vmware.vim25.VirtualDeviceConfigSpecOperation;
 import com.vmware.vim25.VirtualDisk;
 import com.vmware.vim25.VirtualEthernetCard;
-import com.vmware.vim25.VirtualLsiLogicController;
-import com.vmware.vim25.VirtualMachineConfigSpec;
-import com.vmware.vim25.VirtualMachineFileInfo;
-import com.vmware.vim25.VirtualMachineGuestOsIdentifier;
-import com.vmware.vim25.VirtualSCSISharing;
-
 import org.apache.cloudstack.storage.command.AttachAnswer;
 import org.apache.cloudstack.storage.command.AttachCommand;
 import org.apache.cloudstack.storage.command.CopyCmdAnswer;
@@ -86,14 +78,10 @@ import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.script.Script;
 import com.cloud.vm.VirtualMachine.State;
-import com.google.gson.Gson;
-import com.vmware.vim25.ManagedObjectReference;
-import com.vmware.vim25.VirtualDisk;
-import com.vmware.vim25.VirtualEthernetCard;
 
 public class VmwareStorageProcessor implements StorageProcessor {
     private static final Logger s_logger = Logger.getLogger(VmwareStorageProcessor.class);
-    
+
     private VmwareHostService hostService;
     private boolean _fullCloneFlag;
     private VmwareStorageMount mountService;
@@ -103,12 +91,12 @@ public class VmwareStorageProcessor implements StorageProcessor {
     private final Gson _gson;
     private final StorageLayer _storage = new JavaStorageLayer();
     private final PremiumSecondaryStorageResource storageResource;
- 
+
     public VmwareStorageProcessor(VmwareHostService hostService, boolean fullCloneFlag, VmwareStorageMount
mountService,
-                                  Integer timeout,
-                                  VmwareResource resource,
-                                  Integer shutdownWaitMs,
-                                  PremiumSecondaryStorageResource storageResource) {
+            Integer timeout,
+            VmwareResource resource,
+            Integer shutdownWaitMs,
+            PremiumSecondaryStorageResource storageResource) {
         this.hostService = hostService;
         _fullCloneFlag = fullCloneFlag;
         this.mountService = mountService;
@@ -133,9 +121,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
         }
         return null;
     }
-    
+
     private void copyTemplateFromSecondaryToPrimary(VmwareHypervisorHost hyperHost, DatastoreMO
datastoreMo, String secondaryStorageUrl,
-        String templatePathAtSecondaryStorage, String templateName, String templateUuid)
throws Exception {
+            String templatePathAtSecondaryStorage, String templateName, String templateUuid)
throws Exception {
 
         s_logger.info("Executing copyTemplateFromSecondaryToPrimary. secondaryStorage: "
                 + secondaryStorageUrl + ", templatePathAtSecondaryStorage: " + templatePathAtSecondaryStorage
@@ -145,9 +133,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
         s_logger.info("Secondary storage mount point: " + secondaryMountPoint);
 
         String srcOVAFileName = VmwareStorageLayoutHelper.getTemplateOnSecStorageFilePath(
-        	secondaryMountPoint, templatePathAtSecondaryStorage,
-        	templateName, ImageFormat.OVA.getFileExtension());
-        		
+                secondaryMountPoint, templatePathAtSecondaryStorage,
+                templateName, ImageFormat.OVA.getFileExtension());
+
         String srcFileName = getOVFFilePath(srcOVAFileName);
         if(srcFileName == null) {
             Script command = new Script("tar", 0, s_logger);
@@ -200,7 +188,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
         DataStoreTO srcStore = srcData.getDataStore();
         if (!(srcStore instanceof NfsTO)) {
             return new CopyCmdAnswer("unsupported protocol");
-        	}
+        }
         NfsTO nfsImageStore = (NfsTO)srcStore;
         DataTO destData = cmd.getDestTO();
         DataStoreTO destStore = destData.getDataStore();
@@ -209,9 +197,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
         assert (secondaryStorageUrl != null);
 
         String templateUrl = secondaryStorageUrl + "/" + srcData.getPath();
-        
+
         Pair<String, String> templateInfo = VmwareStorageLayoutHelper.decodeTemplateRelativePathAndNameFromUrl(
-        	secondaryStorageUrl, templateUrl, template.getName());
+                secondaryStorageUrl, templateUrl, template.getName());
 
         VmwareContext context = hostService.getServiceContext(cmd);
         try {
@@ -223,8 +211,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
             VirtualMachineMO templateMo = VmwareHelper.pickOneVmOnRunningHost(dcMo.findVmByNameAndLabel(templateUuidName),
true);
 
             if (templateMo == null) {
-                if(s_logger.isInfoEnabled())
+                if(s_logger.isInfoEnabled()) {
                     s_logger.info("Template " + templateInfo.second() + " is not setup yet,
setup template from secondary storage with uuid name: " + templateUuidName);
+                }
                 ManagedObjectReference morDs = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost,
primaryStore.getUuid());
                 assert (morDs != null);
                 DatastoreMO primaryStorageDatastoreMo = new DatastoreMO(context, morDs);
@@ -249,9 +238,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
             return new CopyCmdAnswer(msg);
         }
     }
-    
+
     private boolean createVMLinkedClone(VirtualMachineMO vmTemplate, DatacenterMO dcMo, DatastoreMO
dsMo,
-                                        String vmdkName, ManagedObjectReference morDatastore,
ManagedObjectReference morPool) throws Exception {
+            String vmdkName, ManagedObjectReference morDatastore, ManagedObjectReference
morPool) throws Exception {
 
         ManagedObjectReference morBaseSnapshot = vmTemplate.getSnapshotMor("cloud.template.base");
         if (morBaseSnapshot == null) {
@@ -260,6 +249,11 @@ public class VmwareStorageProcessor implements StorageProcessor {
             throw new Exception(msg);
         }
 
+        if (dsMo.folderExists(String.format("[%s]", dsMo.getName()), vmdkName)) {
+            s_logger.info("deleting files in folder " + vmdkName);
+            dsMo.deleteFile(String.format("[%s] %s/", dsMo.getName(), vmdkName), dcMo.getMor(),
false);
+        }
+
         s_logger.info("creating linked clone from template");
         if (!vmTemplate.createLinkedClone(vmdkName, morBaseSnapshot, dcMo.getVmFolder(),
morPool, morDatastore)) {
             String msg = "Unable to clone from the template";
@@ -268,16 +262,16 @@ public class VmwareStorageProcessor implements StorageProcessor {
         }
 
         s_logger.info("Move volume out of volume-wrapper VM ");
-        String[] vmwareLayoutFilePair = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,

-        		vmdkName, vmdkName, VmwareStorageLayoutType.VMWARE, true);
-        String[] legacyCloudStackLayoutFilePair = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,

-        		vmdkName, vmdkName, VmwareStorageLayoutType.CLOUDSTACK_LEGACY, true);
-        
+        String[] vmwareLayoutFilePair = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,
+                vmdkName, vmdkName, VmwareStorageLayoutType.VMWARE, true);
+        String[] legacyCloudStackLayoutFilePair = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,
+                vmdkName, vmdkName, VmwareStorageLayoutType.CLOUDSTACK_LEGACY, true);
+
         dsMo.moveDatastoreFile(vmwareLayoutFilePair[0],
                 dcMo.getMor(), dsMo.getMor(),
                 legacyCloudStackLayoutFilePair[0],
                 dcMo.getMor(), true);
-        
+
         dsMo.moveDatastoreFile(vmwareLayoutFilePair[1],
                 dcMo.getMor(), dsMo.getMor(),
                 legacyCloudStackLayoutFilePair[1],
@@ -287,7 +281,12 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private boolean createVMFullClone(VirtualMachineMO vmTemplate, DatacenterMO dcMo, DatastoreMO
dsMo,
-                                      String vmdkName, ManagedObjectReference morDatastore,
ManagedObjectReference morPool) throws Exception {
+            String vmdkName, ManagedObjectReference morDatastore, ManagedObjectReference
morPool) throws Exception {
+
+        if (dsMo.folderExists(String.format("[%s]", dsMo.getName()), vmdkName)) {
+            s_logger.info("deleting files in folder " + vmdkName);
+            dsMo.deleteFile(String.format("[%s] %s/", dsMo.getName(), vmdkName), dcMo.getMor(),
false);
+        }
 
         s_logger.info("creating full clone from template");
         if (!vmTemplate.createFullClone(vmdkName, dcMo.getVmFolder(), morPool, morDatastore))
{
@@ -295,18 +294,18 @@ public class VmwareStorageProcessor implements StorageProcessor {
             s_logger.error(msg);
             throw new Exception(msg);
         }
-        
+
         s_logger.info("Move volume out of volume-wrapper VM ");
-        String[] vmwareLayoutFilePair = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,

-        		vmdkName, vmdkName, VmwareStorageLayoutType.VMWARE, false);
-        String[] legacyCloudStackLayoutFilePair = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,

-        		vmdkName, vmdkName, VmwareStorageLayoutType.CLOUDSTACK_LEGACY, false);
-        
+        String[] vmwareLayoutFilePair = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,
+                vmdkName, vmdkName, VmwareStorageLayoutType.VMWARE, false);
+        String[] legacyCloudStackLayoutFilePair = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,
+                vmdkName, vmdkName, VmwareStorageLayoutType.CLOUDSTACK_LEGACY, false);
+
         dsMo.moveDatastoreFile(vmwareLayoutFilePair[0],
                 dcMo.getMor(), dsMo.getMor(),
                 legacyCloudStackLayoutFilePair[0],
                 dcMo.getMor(), true);
-        
+
         dsMo.moveDatastoreFile(vmwareLayoutFilePair[1],
                 dcMo.getMor(), dsMo.getMor(),
                 legacyCloudStackLayoutFilePair[1],
@@ -329,8 +328,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
             DatacenterMO dcMo = new DatacenterMO(context, hyperHost.getHyperHostDatacenter());
             VirtualMachineMO vmMo = null;
             ManagedObjectReference morDatastore = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost,
primaryStore.getUuid());
-            if (morDatastore == null)
+            if (morDatastore == null) {
                 throw new Exception("Unable to find datastore in vSphere");
+            }
 
             DatastoreMO dsMo = new DatastoreMO(context, morDatastore);
 
@@ -345,17 +345,17 @@ public class VmwareStorageProcessor implements StorageProcessor {
                         throw new Exception("Unable to create a dummy VM for volume creation");
                     }
 
-                    String vmdkFilePair[] = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,
null, vmdkName, 
-                    	VmwareStorageLayoutType.CLOUDSTACK_LEGACY, 
-                    	true	// we only use the first file in the pair, linked or not will not
matter
-                    	);
+                    String vmdkFilePair[] = VmwareStorageLayoutHelper.getVmdkFilePairDatastorePath(dsMo,
null, vmdkName,
+                            VmwareStorageLayoutType.CLOUDSTACK_LEGACY,
+                            true	// we only use the first file in the pair, linked or not
will not matter
+                            );
                     String volumeDatastorePath = vmdkFilePair[0];
                     synchronized (this) {
                         s_logger.info("Delete file if exists in datastore to clear the way
for creating the volume. file: " + volumeDatastorePath);
                         VmwareStorageLayoutHelper.deleteVolumeVmdkFiles(dsMo, vmdkName, dcMo);
                         vmMo.createDisk(volumeDatastorePath, (int) (volume.getSize() / (1024L
* 1024L)), morDatastore, -1);
                         vmMo.detachDisk(volumeDatastorePath, false);
-                    }	
+                    }
 
                     VolumeObjectTO newVol = new VolumeObjectTO();
                     newVol.setPath(vmdkName);
@@ -412,7 +412,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private Pair<String, String> copyVolumeFromSecStorage(VmwareHypervisorHost hyperHost,
String srcVolumePath,
-                                                          DatastoreMO dsMo, String secStorageUrl)
throws Exception {
+            DatastoreMO dsMo, String secStorageUrl) throws Exception {
 
         String volumeFolder = null;
         String volumeName = null;
@@ -500,15 +500,15 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private Pair<String, String> copyVolumeToSecStorage(VmwareHostService hostService,
VmwareHypervisorHost hyperHost, CopyCommand cmd,
-                                                        String vmName, String poolId, String
volumePath, String destVolumePath,
-                                                        String secStorageUrl, String workerVmName)
throws Exception {
+            String vmName, String poolId, String volumePath, String destVolumePath,
+            String secStorageUrl, String workerVmName) throws Exception {
         VirtualMachineMO workerVm=null;
         VirtualMachineMO vmMo=null;
         String exportName = UUID.randomUUID().toString().replace("-", "");
 
         try {
             ManagedObjectReference morDs = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost,
poolId);
-            
+
             if (morDs == null) {
                 String msg = "Unable to find volumes's storage pool for copy volume operation";
                 s_logger.error(msg);
@@ -520,7 +520,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
                 // create a dummy worker vm for attaching the volume
                 DatastoreMO dsMo = new DatastoreMO(hyperHost.getContext(), morDs);
                 workerVm = HypervisorHostHelper.createWorkerVM(hyperHost, dsMo, workerVmName);
-                
+
                 if (workerVm == null) {
                     String msg = "Unable to create worker VM to execute CopyVolumeCommand";
                     s_logger.error(msg);
@@ -582,7 +582,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private void postCreatePrivateTemplate(String installFullPath, long templateId,
-                                           String templateName, long size, long virtualSize)
throws Exception {
+            String templateName, long size, long virtualSize) throws Exception {
 
         // TODO a bit ugly here
         BufferedWriter out = null;
@@ -615,13 +615,14 @@ public class VmwareStorageProcessor implements StorageProcessor {
             out.write("ova.size=" + size);
             out.newLine();
         } finally {
-            if(out != null)
+            if(out != null) {
                 out.close();
+            }
         }
     }
 
     private Ternary<String, Long, Long> createTemplateFromVolume(VirtualMachineMO vmMo,
String installPath, long templateId, String templateUniqueName,
-                                                                 String secStorageUrl, String
volumePath, String workerVmName) throws Exception {
+            String secStorageUrl, String volumePath, String workerVmName) throws Exception
{
 
         String secondaryMountPoint = mountService.getMountPoint(secStorageUrl);
         String installFullPath = secondaryMountPoint + "/" + installPath;
@@ -707,8 +708,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
 
             VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(volume.getVmName());
             if (vmMo == null) {
-                if(s_logger.isDebugEnabled())
+                if(s_logger.isDebugEnabled()) {
                     s_logger.debug("Unable to find the owner VM for CreatePrivateTemplateFromVolumeCommand
on host " + hyperHost.getHyperHostName() + ", try within datacenter");
+                }
                 vmMo = hyperHost.findVmOnPeerHyperHost(volume.getVmName());
 
                 if (vmMo == null) {
@@ -750,7 +752,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private void writeMetaOvaForTemplate(String installFullPath, String ovfFilename, String
vmdkFilename,
-                                         String templateName, long diskSize) throws Exception
{
+            String templateName, long diskSize) throws Exception {
 
         // TODO a bit ugly here
         BufferedWriter out = null;
@@ -769,13 +771,14 @@ public class VmwareStorageProcessor implements StorageProcessor {
             out.write("disk1.size=" + diskSize);
             out.newLine();
         } finally {
-            if(out != null)
+            if(out != null) {
                 out.close();
+            }
         }
     }
 
     private Ternary<String, Long, Long> createTemplateFromSnapshot(String installPath,
String templateUniqueName,
-                                                                   String secStorageUrl,
String snapshotPath, Long templateId) throws Exception {
+            String secStorageUrl, String snapshotPath, Long templateId) throws Exception
{
         //Snapshot path is decoded in this form: /snapshots/account/volumeId/uuid/uuid
         String[] tokens = snapshotPath.split(File.separator);
         String backupSSUuid = tokens[tokens.length - 1];
@@ -917,7 +920,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
                     uniqeName,
                     nfsSvr.getUrl(), snapshot.getPath(),
                     template.getId()
-            );
+                    );
 
             TemplateObjectTO newTemplate = new TemplateObjectTO();
             newTemplate.setPath(result.first());
@@ -937,8 +940,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private void exportVolumeToSecondaryStroage(VirtualMachineMO vmMo, String volumePath,
-                                                String secStorageUrl, String secStorageDir,
String exportName,
-                                                String workerVmName) throws Exception {
+            String secStorageUrl, String secStorageDir, String exportName,
+            String workerVmName) throws Exception {
 
         String secondaryMountPoint = mountService.getMountPoint(secStorageUrl);
         String exportPath =  secondaryMountPoint + "/" + secStorageDir + "/" + exportName;
@@ -948,8 +951,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
                 Script command = new Script(false, "mkdir", _timeout, s_logger);
                 command.add("-p");
                 command.add(exportPath);
-                if(command.execute() != null)
+                if(command.execute() != null) {
                     throw new Exception("unable to prepare snapshot backup directory");
+                }
             }
         }
 
@@ -984,15 +988,15 @@ public class VmwareStorageProcessor implements StorageProcessor {
 
 
     private String backupSnapshotToSecondaryStorage(VirtualMachineMO vmMo, String installPath,
-                                                    String volumePath, String snapshotUuid,
String secStorageUrl,
-                                                    String prevSnapshotUuid, String prevBackupUuid,
String workerVmName) throws Exception {
+            String volumePath, String snapshotUuid, String secStorageUrl,
+            String prevSnapshotUuid, String prevBackupUuid, String workerVmName) throws Exception
{
 
         String backupUuid = UUID.randomUUID().toString();
         exportVolumeToSecondaryStroage(vmMo, volumePath, secStorageUrl,
                 installPath, backupUuid, workerVmName);
         return backupUuid + "/" + backupUuid;
     }
-    
+
     @Override
     public Answer backupSnapshot(CopyCommand cmd) {
         SnapshotObjectTO srcSnapshot = (SnapshotObjectTO)cmd.getSrcTO();
@@ -1030,15 +1034,16 @@ public class VmwareStorageProcessor implements StorageProcessor {
             try {
                 vmMo = hyperHost.findVmOnHyperHost(vmName);
                 if (vmMo == null) {
-                    if(s_logger.isDebugEnabled())
+                    if(s_logger.isDebugEnabled()) {
                         s_logger.debug("Unable to find owner VM for BackupSnapshotCommand
on host " + hyperHost.getHyperHostName() + ", will try within datacenter");
+                    }
 
                     vmMo = hyperHost.findVmOnPeerHyperHost(vmName);
                     if(vmMo == null) {
                         dsMo = new DatastoreMO(hyperHost.getContext(), morDs);
 
                         workerVMName = hostService.getWorkerName(context, cmd, 0);
-                        
+
                         vmMo = HypervisorHostHelper.createWorkerVM(hyperHost, dsMo, workerVMName);
 
                         if (vmMo == null) {
@@ -1116,8 +1121,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private Answer attachVolume(Command cmd, DiskTO disk, boolean isAttach, boolean isManaged,
String vmName,
-                                String iScsiName, String storageHost, int storagePort, String
initiatorUsername, String initiatorPassword,
-                                String targetUsername, String targetPassword) {
+            String iScsiName, String storageHost, int storagePort, String initiatorUsername,
String initiatorPassword,
+            String targetUsername, String targetPassword) {
 
         VolumeObjectTO volumeTO = (VolumeObjectTO)disk.getData();
         PrimaryDataStoreTO primaryStore = (PrimaryDataStoreTO)volumeTO.getDataStore();
@@ -1187,12 +1192,13 @@ public class VmwareStorageProcessor implements StorageProcessor {
         VmwareHypervisorHost hyperHost = hostService.getHyperHost(hostService.getServiceContext(null),
null);
         ManagedObjectReference morDatastore = hyperHost.mountDatastore(false, uri.getHost(),
0, uri.getPath(), storeName.replace("-", ""));
 
-        if (morDatastore == null)
+        if (morDatastore == null) {
             throw new Exception("Unable to mount secondary storage on host. storeUrl: " +
storeUrl);
+        }
 
         return morDatastore;
     }
-    
+
     private Answer attachIso(DiskTO disk, boolean isAttach, String vmName) {
         try {
             VmwareHypervisorHost hyperHost = hostService.getHyperHost(hostService.getServiceContext(null),
null);
@@ -1205,8 +1211,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
             TemplateObjectTO iso = (TemplateObjectTO)disk.getData();
             NfsTO nfsImageStore = (NfsTO)iso.getDataStore();
             String storeUrl = null;
-            if (nfsImageStore != null)
+            if (nfsImageStore != null) {
                 storeUrl = nfsImageStore.getUrl();
+            }
             if (storeUrl == null) {
                 if (!iso.getName().equalsIgnoreCase("vmware-tools.iso")) {
                     String msg = "ISO store root url is not found in AttachIsoCommand";
@@ -1292,8 +1299,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
             DatacenterMO dcMo = new DatacenterMO(context, hyperHost.getHyperHostDatacenter());
 
             ManagedObjectReference morDatastore = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost,
primaryStore.getUuid());
-            if (morDatastore == null)
+            if (morDatastore == null) {
                 throw new Exception("Unable to find datastore in vSphere");
+            }
 
             DatastoreMO dsMo = new DatastoreMO(context, morDatastore);
             // create data volume
@@ -1303,7 +1311,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
             String volumeDatastorePath = dsMo.getDatastorePath(volumeUuid + ".vmdk");
             String dummyVmName = this.hostService.getWorkerName(context, cmd, 0);
             try {
-            	s_logger.info("Create worker VM " + dummyVmName);
+                s_logger.info("Create worker VM " + dummyVmName);
                 vmMo = HypervisorHostHelper.createWorkerVM(hyperHost, dsMo, dummyVmName);
                 if (vmMo == null) {
                     throw new Exception("Unable to create a dummy VM for volume creation");
@@ -1324,8 +1332,8 @@ public class VmwareStorageProcessor implements StorageProcessor {
             } finally {
                 s_logger.info("Destroy dummy VM after volume creation");
                 if(vmMo != null) {
-	                vmMo.detachAllDisks();
-	                vmMo.destroy();
+                    vmMo.detachAllDisks();
+                    vmMo.destroy();
                 }
             }
         } catch (Throwable e) {
@@ -1356,17 +1364,17 @@ public class VmwareStorageProcessor implements StorageProcessor {
             s_logger.info("Executing resource DestroyCommand: " + _gson.toJson(cmd));
         }
 
-		/*
-		 * DestroyCommand content example
-		 *
-		 * {"volume": {"id":5,"name":"Volume1", "mountPoint":"/export/home/kelven/vmware-test/primary",
-		 * "path":"6bb8762f-c34c-453c-8e03-26cc246ceec4", "size":0,"type":"DATADISK","resourceType":
-		 * "STORAGE_POOL","storagePoolType":"NetworkFilesystem", "poolId":0,"deviceId":0 } }
-		 *
-		 * {"volume": {"id":1, "name":"i-2-1-KY-ROOT", "mountPoint":"/export/home/kelven/vmware-test/primary",
-		 * "path":"i-2-1-KY-ROOT","size":0,"type":"ROOT", "resourceType":"STORAGE_POOL", "storagePoolType":"NetworkFilesystem",
-		 * "poolId":0,"deviceId":0 } }
-		 */
+        /*
+         * DestroyCommand content example
+         *
+         * {"volume": {"id":5,"name":"Volume1", "mountPoint":"/export/home/kelven/vmware-test/primary",
+         * "path":"6bb8762f-c34c-453c-8e03-26cc246ceec4", "size":0,"type":"DATADISK","resourceType":
+         * "STORAGE_POOL","storagePoolType":"NetworkFilesystem", "poolId":0,"deviceId":0
} }
+         *
+         * {"volume": {"id":1, "name":"i-2-1-KY-ROOT", "mountPoint":"/export/home/kelven/vmware-test/primary",
+         * "path":"i-2-1-KY-ROOT","size":0,"type":"ROOT", "resourceType":"STORAGE_POOL",
"storagePoolType":"NetworkFilesystem",
+         * "poolId":0,"deviceId":0 } }
+         */
 
         try {
             VmwareContext context = hostService.getServiceContext(null);
@@ -1400,8 +1408,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
                         List<NetworkDetails> networks = vmMo.getNetworksWithDetails();
 
                         // tear down all devices first before we destroy the VM to avoid
accidently delete disk backing files
-                        if (resource.getVmState(vmMo) != State.Stopped)
+                        if (resource.getVmState(vmMo) != State.Stopped) {
                             vmMo.safePowerOff(_shutdown_waitMs);
+                        }
                         vmMo.tearDownDevices(new Class<?>[] { VirtualDisk.class, VirtualEthernetCard.class
});
                         vmMo.destroy();
 
@@ -1414,8 +1423,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
                         }
                     }
 
-                    if (s_logger.isInfoEnabled())
+                    if (s_logger.isInfoEnabled()) {
                         s_logger.info("Destroy volume by original name: " + vol.getPath()
+ ".vmdk");
+                    }
                     dsMo.deleteFile(vol.getPath() + ".vmdk", morDc, true);
 
                     // root volume may be created via linked-clone, delete the delta disk
as well
@@ -1440,8 +1450,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
                 // evitTemplate will be converted into DestroyCommand, test if we are running
in this case
                 VirtualMachineMO vmMo = clusterMo.findVmOnHyperHost(vol.getPath());
                 if (vmMo != null) {
-                    if (s_logger.isInfoEnabled())
+                    if (s_logger.isInfoEnabled()) {
                         s_logger.info("Destroy template volume " + vol.getPath());
+                    }
 
                     vmMo.destroy();
                     return new Answer(cmd, true, "Success");
@@ -1497,7 +1508,7 @@ public class VmwareStorageProcessor implements StorageProcessor {
     }
 
     private Long restoreVolumeFromSecStorage(VmwareHypervisorHost hyperHost, DatastoreMO
primaryDsMo, String newVolumeName,
-                                             String secStorageUrl, String secStorageDir,
String backupName) throws Exception {
+            String secStorageUrl, String secStorageDir, String backupName) throws Exception
{
 
         String secondaryMountPoint = mountService.getMountPoint(secStorageUrl);
         String srcOVAFileName = null;
@@ -1548,8 +1559,9 @@ public class VmwareStorageProcessor implements StorageProcessor {
         try {
             hyperHost.importVmFromOVF(srcOVFFileName, newVolumeName, primaryDsMo, "thin");
             clonedVm = hyperHost.findVmOnHyperHost(newVolumeName);
-            if(clonedVm == null)
+            if(clonedVm == null) {
                 throw new Exception("Unable to create container VM for volume creation");
+            }
 
             clonedVm.moveAllVmDiskFiles(primaryDsMo, "", false);
             clonedVm.detachAllDisks();
@@ -1625,10 +1637,10 @@ public class VmwareStorageProcessor implements StorageProcessor {
             return new Answer(cmd, false, "unsupported command");
         }
     }
-    
+
     private static String deriveTemplateUuidOnHost(VmwareHypervisorHost hyperHost, String
storeIdentifier, String templateName) {
-    	String templateUuid = UUID.nameUUIDFromBytes((templateName + "@" + storeIdentifier +
"-" + hyperHost.getMor().getValue()).getBytes()).toString();
-    	templateUuid = templateUuid.replaceAll("-", "");
-    	return templateUuid;
+        String templateUuid = UUID.nameUUIDFromBytes((templateName + "@" + storeIdentifier
+ "-" + hyperHost.getMor().getValue()).getBytes()).toString();
+        templateUuid = templateUuid.replaceAll("-", "");
+        return templateUuid;
     }
 }


Mime
View raw message