From bc677e2a999f7c44b3cb3353fb0a63d02eba3e7f Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Mon, 6 Jan 2014 14:19:31 +0530 Subject: [PATCH] CLOUDSTACK-5782. [VMware] Snapshot creation on a detached volume failes with NPE. For a detached volume, don't try to find the associated VM on the hypervisor/peer hypervisor host. By default create a worker VM to perform snapshot operations. Conflicts: plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java --- .../resource/VmwareStorageProcessor.java | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) 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 a6d065f1d09..70c8c885817 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java +++ b/plugins/hypervisors/vmware/src/com/cloud/storage/resource/VmwareStorageProcessor.java @@ -1000,32 +1000,26 @@ public class VmwareStorageProcessor implements StorageProcessor { CopyCmdAnswer answer = null; try { - vmMo = hyperHost.findVmOnHyperHost(vmName); - if (vmMo == null) { - 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(vmName != null) { + vmMo = hyperHost.findVmOnHyperHost(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) { - throw new Exception("Failed to find the newly create or relocated VM. vmName: " + workerVMName); + if(s_logger.isDebugEnabled()) { + s_logger.debug("Unable to find owner VM for BackupSnapshotCommand on host " + hyperHost.getHyperHostName() + ", will try within datacenter"); } - workerVm = vmMo; - - // attach volume to worker VM - String datastoreVolumePath = dsMo.getDatastorePath(volumePath + ".vmdk"); - vmMo.attachDisk(new String[] {datastoreVolumePath}, morDs); - } else { - s_logger.info("Using owner VM " + vmName + " for snapshot operation"); - hasOwnerVm = true; + 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) { + throw new Exception("Failed to find the newly create or relocated VM. vmName: " + workerVMName); + } + workerVm = vmMo; + // attach volume to worker VM + String datastoreVolumePath = dsMo.getDatastorePath(volumePath + ".vmdk"); + vmMo.attachDisk(new String[] { datastoreVolumePath }, morDs); } else { s_logger.info("Using owner VM " + vmName + " for snapshot operation"); hasOwnerVm = true;