Skip to content

Commit 3915b3a

Browse files
committed
feat(libstore/s3-binary-cache-store): implement abortMultipartUpload()
Implement `abortMultipartUpload()` for cleaning up incomplete multipart uploads on error: - Constructs URL with `?uploadId=ID` query parameter - Issues `DELETE` request to abort the multipart upload
1 parent 91ed370 commit 3915b3a

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

src/libstore/s3-binary-cache-store.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ class S3BinaryCacheStore : public virtual HttpBinaryCacheStore
2626

2727
private:
2828
ref<S3BinaryCacheStoreConfig> s3Config;
29+
30+
/**
31+
* Abort a multipart upload
32+
*
33+
* @see
34+
* https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html#API_AbortMultipartUpload_RequestSyntax
35+
*/
36+
void abortMultipartUpload(std::string_view key, std::string_view uploadId);
2937
};
3038

3139
void S3BinaryCacheStore::upsertFile(
@@ -37,6 +45,19 @@ void S3BinaryCacheStore::upsertFile(
3745
HttpBinaryCacheStore::upsertFile(path, istream, mimeType, sizeHint);
3846
}
3947

48+
void S3BinaryCacheStore::abortMultipartUpload(std::string_view key, std::string_view uploadId)
49+
{
50+
auto req = makeRequest(key);
51+
req.setupForS3();
52+
53+
auto url = req.uri.parsed();
54+
url.query["uploadId"] = uploadId;
55+
req.uri = VerbatimURL(url);
56+
req.method = HttpMethod::DELETE;
57+
58+
getFileTransfer()->enqueueFileTransfer(req).get();
59+
}
60+
4061
StringSet S3BinaryCacheStoreConfig::uriSchemes()
4162
{
4263
return {"s3"};

0 commit comments

Comments
 (0)