Merge pull request #64714 from ClickHouse/s3jank

Check for missing Upload ID in CreateMultipartUpload reply
This commit is contained in:
Alexey Milovidov 2024-06-02 01:12:00 +02:00 committed by GitHub
commit a838adc0bf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 7 deletions

View File

@ -149,16 +149,18 @@ namespace
dest_bucket, dest_key, /* local_path_ */ {}, /* data_size */ 0, dest_bucket, dest_key, /* local_path_ */ {}, /* data_size */ 0,
outcome.IsSuccess() ? nullptr : &outcome.GetError()); outcome.IsSuccess() ? nullptr : &outcome.GetError());
if (outcome.IsSuccess()) if (!outcome.IsSuccess())
{
multipart_upload_id = outcome.GetResult().GetUploadId();
LOG_TRACE(log, "Multipart upload has created. Bucket: {}, Key: {}, Upload id: {}", dest_bucket, dest_key, multipart_upload_id);
}
else
{ {
ProfileEvents::increment(ProfileEvents::WriteBufferFromS3RequestsErrors, 1); ProfileEvents::increment(ProfileEvents::WriteBufferFromS3RequestsErrors, 1);
throw S3Exception(outcome.GetError().GetMessage(), outcome.GetError().GetErrorType()); throw S3Exception(outcome.GetError().GetMessage(), outcome.GetError().GetErrorType());
} }
multipart_upload_id = outcome.GetResult().GetUploadId();
if (multipart_upload_id.empty())
{
ProfileEvents::increment(ProfileEvents::WriteBufferFromS3RequestsErrors, 1);
throw Exception(ErrorCodes::S3_ERROR, "Invalid CreateMultipartUpload result: missing UploadId.");
}
LOG_TRACE(log, "Multipart upload was created. Bucket: {}, Key: {}, Upload id: {}", dest_bucket, dest_key, multipart_upload_id);
} }
void completeMultipartUpload() void completeMultipartUpload()

View File

@ -413,7 +413,13 @@ void WriteBufferFromS3::createMultipartUpload()
multipart_upload_id = outcome.GetResult().GetUploadId(); multipart_upload_id = outcome.GetResult().GetUploadId();
LOG_TRACE(limitedLog, "Multipart upload has created. {}", getShortLogDetails()); if (multipart_upload_id.empty())
{
ProfileEvents::increment(ProfileEvents::WriteBufferFromS3RequestsErrors, 1);
throw Exception(ErrorCodes::S3_ERROR, "Invalid CreateMultipartUpload result: missing UploadId.");
}
LOG_TRACE(limitedLog, "Multipart upload was created. {}", getShortLogDetails());
} }
void WriteBufferFromS3::abortMultipartUpload() void WriteBufferFromS3::abortMultipartUpload()