CLOUDSTACK-8136. [VMware] Create VM snapshot fails if a previous attempt to take the snapshot failed. While looking for an ongoing VM snapshot task, check the task status to identify if the task is still running.
(cherry picked from commit 25a4f0dc530951e87fe357313dc983cb75aa8972) Signed-off-by: Rohit Yadav <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/865940d0 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/865940d0 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/865940d0 Branch: refs/heads/4.5 Commit: 865940d0888f5727597874575fff1140dab41839 Parents: d928f5b Author: Likitha Shetty <[email protected]> Authored: Tue Dec 30 14:16:00 2014 +0530 Committer: Rohit Yadav <[email protected]> Committed: Mon Apr 13 15:44:09 2015 +0530 ---------------------------------------------------------------------- .../hypervisor/vmware/manager/VmwareStorageManagerImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/865940d0/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java ---------------------------------------------------------------------- diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java index 1981303..3aec7a4 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareStorageManagerImpl.java @@ -37,6 +37,7 @@ import com.vmware.vim25.HostDatastoreBrowserSearchResults; import com.vmware.vim25.HostDatastoreBrowserSearchSpec; import com.vmware.vim25.ManagedObjectReference; import com.vmware.vim25.TaskInfo; +import com.vmware.vim25.TaskInfoState; import com.vmware.vim25.VirtualDisk; import org.apache.cloudstack.storage.to.TemplateObjectTO; @@ -1181,8 +1182,10 @@ public class VmwareStorageManagerImpl implements VmwareStorageManager { TaskInfo info = (TaskInfo)(context.getVimClient().getDynamicProperty(taskMor, "info")); if (info.getEntityName().equals(cmd.getVmName()) && info.getName().equalsIgnoreCase("CreateSnapshot_Task")) { - s_logger.debug("There is already a VM snapshot task running, wait for it"); - context.getVimClient().waitForTask(taskMor); + if (!(info.getState().equals(TaskInfoState.SUCCESS) || info.getState().equals(TaskInfoState.ERROR))) { + s_logger.debug("There is already a VM snapshot task running, wait for it"); + context.getVimClient().waitForTask(taskMor); + } } }
