From 3f5fcea513e19a9547a9aa1169dbdbe1950bc7dd Mon Sep 17 00:00:00 2001
From: Sinisa Veseli <sveseli@aps.anl.gov>
Date: Fri, 4 Dec 2015 22:08:56 +0000
Subject: [PATCH] better error handling in case transfer fails for any reason

---
 .../dm/ds_web_service/api/fileRestApi.py      | 30 ++++++++++---------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/python/dm/ds_web_service/api/fileRestApi.py b/src/python/dm/ds_web_service/api/fileRestApi.py
index 6d365118..6d0c5d96 100755
--- a/src/python/dm/ds_web_service/api/fileRestApi.py
+++ b/src/python/dm/ds_web_service/api/fileRestApi.py
@@ -55,21 +55,23 @@ class FileRestApi(DsRestApi):
         self.logger.info('Authorizing download for user %s (experiment: %s)' % (username, experimentName))
         responseDict = self.sendSessionRequest(url=url, method='POST')
         experiment = Experiment(responseDict)
-        storageDirectory = experiment.get('storageDirectory')
-        storageHost = experiment.get('storageHost')
-        src = '%s@%s:%s' % (username, storageHost, storageDirectory)
-        if experimentFilePath:
-            src = '%s/%s' % (src, experimentFilePath)
-        dest = destDirectory
-             
-        # Download
-        fileTransfer = RsyncFileTransfer(src=src, dest=dest)
-        self.logger.info('Executing file download on behalf of %s (experiment: %s)' % (username, experimentName))
-        fileTransfer.execute()
 
-        # Finalize download
-        self.logger.info('Deleting download authorization for user %s (experiment: %s)' % (username, experimentName))
-        self.sendSessionRequest(url=url, method='DELETE')
+        # Download
+        try:
+            storageDirectory = experiment.get('storageDirectory')
+            storageHost = experiment.get('storageHost')
+            src = '%s@%s:%s' % (username, storageHost, storageDirectory)
+            if experimentFilePath:
+                src = '%s/%s' % (src, experimentFilePath)
+            dest = destDirectory
+             
+            fileTransfer = RsyncFileTransfer(src=src, dest=dest)
+            self.logger.info('Executing file download on behalf of %s (experiment: %s)' % (username, experimentName))
+            fileTransfer.execute()
+        finally:
+            # Finalize download
+            self.logger.info('Deleting download authorization for user %s (experiment: %s)' % (username, experimentName))
+            self.sendSessionRequest(url=url, method='DELETE')
 
 #######################################################################
 # Testing.
-- 
GitLab