forked from TrueCloudLab/distribution
Merge pull request #3763 from distribution/multipart-upload-empty-files
Enable pushing empty blobs
This commit is contained in:
commit
0c958010ac
1 changed files with 24 additions and 0 deletions
|
@ -1462,6 +1462,30 @@ func (w *writer) Commit() error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This is an edge case when we are trying to upload an empty chunk of data using
|
||||||
|
// a MultiPart upload. As a result we are trying to complete the MultipartUpload
|
||||||
|
// with an empty slice of `completedUploadedParts` which will always lead to 400
|
||||||
|
// being returned from S3 See: https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#CompletedMultipartUpload
|
||||||
|
// Solution: we upload an empty i.e. 0 byte part as a single part and then append it
|
||||||
|
// to the completedUploadedParts slice used to complete the Multipart upload.
|
||||||
|
if len(w.parts) == 0 {
|
||||||
|
resp, err := w.driver.S3.UploadPart(&s3.UploadPartInput{
|
||||||
|
Bucket: aws.String(w.driver.Bucket),
|
||||||
|
Key: aws.String(w.key),
|
||||||
|
PartNumber: aws.Int64(1),
|
||||||
|
UploadId: aws.String(w.uploadID),
|
||||||
|
Body: bytes.NewReader(nil),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
completedUploadedParts = append(completedUploadedParts, &s3.CompletedPart{
|
||||||
|
ETag: resp.ETag,
|
||||||
|
PartNumber: aws.Int64(1),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
sort.Sort(completedUploadedParts)
|
sort.Sort(completedUploadedParts)
|
||||||
|
|
||||||
_, err = w.driver.S3.CompleteMultipartUpload(&s3.CompleteMultipartUploadInput{
|
_, err = w.driver.S3.CompleteMultipartUpload(&s3.CompleteMultipartUploadInput{
|
||||||
|
|
Loading…
Add table
Reference in a new issue