diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java index 77f6b795af4..77862d118bf 100755 --- a/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/mo/HypervisorHostHelper.java @@ -999,6 +999,7 @@ public class HypervisorHostHelper { s_logger.error(msg); throw new Exception(msg); } + boolean importSuccess = true; final HttpNfcLeaseMO leaseMo = new HttpNfcLeaseMO(context, morLease); HttpNfcLeaseState state = leaseMo.waitState( new HttpNfcLeaseState[] { HttpNfcLeaseState.ready, HttpNfcLeaseState.error }); @@ -1032,13 +1033,25 @@ public class HypervisorHostHelper { } } } - } finally { - progressReporter.close(); - } - leaseMo.updateLeaseProgress(100); - } - } finally { - leaseMo.completeLease(); + } catch (Exception e) { + s_logger.error("Failed to complete file upload task. " + e.getMessage()); + // Set flag to cleanup the stale template left due to failed import operation, if any + importSuccess = false; + throw e; + } finally { + progressReporter.close(); + } + if (bytesAlreadyWritten == totalBytes) { + leaseMo.updateLeaseProgress(100); + } + } + } finally { + if (!importSuccess) { + s_logger.error("Aborting the lease on " + vmName + " after import operation failed."); + leaseMo.abortLease(); + } else { + leaseMo.completeLease(); + } } } }