1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-09 03:56:01 +01:00

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
This commit is contained in:
Bernardo Meurer Costa 2025-10-22 08:10:20 +00:00
parent 91ed3701fe
commit 3915b3a111
No known key found for this signature in database

View file

@ -26,6 +26,14 @@ public:
private:
ref<S3BinaryCacheStoreConfig> s3Config;
/**
* Abort a multipart upload
*
* @see
* https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html#API_AbortMultipartUpload_RequestSyntax
*/
void abortMultipartUpload(std::string_view key, std::string_view uploadId);
};
void S3BinaryCacheStore::upsertFile(
@ -37,6 +45,19 @@ void S3BinaryCacheStore::upsertFile(
HttpBinaryCacheStore::upsertFile(path, istream, mimeType, sizeHint);
}
void S3BinaryCacheStore::abortMultipartUpload(std::string_view key, std::string_view uploadId)
{
auto req = makeRequest(key);
req.setupForS3();
auto url = req.uri.parsed();
url.query["uploadId"] = uploadId;
req.uri = VerbatimURL(url);
req.method = HttpMethod::DELETE;
getFileTransfer()->enqueueFileTransfer(req).get();
}
StringSet S3BinaryCacheStoreConfig::uriSchemes()
{
return {"s3"};