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.c...@citrix.com>
Authored: Wed Aug 7 11:13:56 2013 -0700
Committer: Min Chen <min.c...@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;
     }
 }

Reply via email to