From 2786bea839db2d19c96367903edf62e4e6fca642 Mon Sep 17 00:00:00 2001 From: royatwp <90897950+royatwp@users.noreply.github.com> Date: Tue, 27 May 2025 07:25:01 +0100 Subject: [PATCH] Unable to upload empty files to seaweed via. multipart when length is unknown (#6729) --- weed/s3api/filer_multipart.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/weed/s3api/filer_multipart.go b/weed/s3api/filer_multipart.go index 3346fdf5f..032f1a73b 100644 --- a/weed/s3api/filer_multipart.go +++ b/weed/s3api/filer_multipart.go @@ -84,11 +84,15 @@ func (s3a *S3ApiServer) completeMultipartUpload(input *s3.CompleteMultipartUploa } completedPartNumbers := []int{} completedPartMap := make(map[int][]string) + + maxPartNo := 1 + for _, part := range parts.Parts { if _, ok := completedPartMap[part.PartNumber]; !ok { completedPartNumbers = append(completedPartNumbers, part.PartNumber) } completedPartMap[part.PartNumber] = append(completedPartMap[part.PartNumber], part.ETag) + maxPartNo = max(maxPartNo, part.PartNumber) } sort.Ints(completedPartNumbers) @@ -156,7 +160,7 @@ func (s3a *S3ApiServer) completeMultipartUpload(input *s3.CompleteMultipartUploa glog.Warningf("invalid complete etag %s, partEtag %s", partETag, entryETag) stats.S3HandlerCounter.WithLabelValues(stats.ErrorCompletedEtagInvalid).Inc() } - if len(entry.Chunks) == 0 { + if len(entry.Chunks) == 0 && partNumber != maxPartNo { glog.Warningf("completeMultipartUpload %s empty chunks", entry.Name) stats.S3HandlerCounter.WithLabelValues(stats.ErrorCompletedPartEmpty).Inc() continue