From 5d7f42d647c3a138886b729e67f423686b53c8cf Mon Sep 17 00:00:00 2001 From: Sateesh Chodapuneedi Date: Fri, 1 Mar 2013 09:41:30 +0530 Subject: [PATCH] CLOUDSTACK-1403 Storage and console-proxy related error Aborting lease over VM/template if uploading file fails. Earlier the lease was completed successfully even if upload fails due to IOException or ConnectionException while uploading file to HTTP URL. Porting the fix from 4.1 branch to master. Signed-off-by: Sateesh Chodapuneedi --- .../vmware/mo/HypervisorHostHelper.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) 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(); + } } } }