From a1d3ff97669f70b7cefd6314ff42f53aee910822 Mon Sep 17 00:00:00 2001 From: Andrew Gaul Date: Fri, 1 Feb 2019 10:17:39 -0800 Subject: [PATCH] Automatically abort failed multipart requests This can avoid dangling parts. However, many transfers fail due to network errors so we still need other mechanisms to handle these parts. --- src/curl.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/curl.cpp b/src/curl.cpp index 59305a5..5ccc25c 100644 --- a/src/curl.cpp +++ b/src/curl.cpp @@ -1429,6 +1429,14 @@ int S3fsCurl::ParallelMultipartUploadRequest(const char* tpath, headers_t& meta, // Multi request if(0 != (result = curlmulti.Request())){ S3FS_PRN_ERR("error occurred in multi request(errno=%d).", result); + + S3fsCurl s3fscurl_abort(true); + int result2 = s3fscurl_abort.AbortMultipartUpload(tpath, upload_id); + s3fscurl_abort.DestroyCurlHandle(); + if(result2 != 0){ + S3FS_PRN_ERR("error aborting multipart upload(errno=%d).", result2); + } + return result; } @@ -3923,6 +3931,14 @@ int S3fsCurl::MultipartRenameRequest(const char* from, const char* to, headers_t // Multi request if(0 != (result = curlmulti.Request())){ S3FS_PRN_ERR("error occurred in multi request(errno=%d).", result); + + S3fsCurl s3fscurl_abort(true); + int result2 = s3fscurl_abort.AbortMultipartUpload(to, upload_id); + s3fscurl_abort.DestroyCurlHandle(); + if(result2 != 0){ + S3FS_PRN_ERR("error aborting multipart upload(errno=%d).", result2); + } + return result; }