aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroyatwp <90897950+royatwp@users.noreply.github.com>2025-05-27 07:25:01 +0100
committerGitHub <noreply@github.com>2025-05-26 23:25:01 -0700
commit2786bea839db2d19c96367903edf62e4e6fca642 (patch)
tree35f0006082de0c9661254bce2a30d7fde63ab316
parent6677f1f5639b8994f0fbe11a1bf991e9f88fa1da (diff)
downloadseaweedfs-2786bea839db2d19c96367903edf62e4e6fca642.tar.xz
seaweedfs-2786bea839db2d19c96367903edf62e4e6fca642.zip
Unable to upload empty files to seaweed via. multipart when length is unknown (#6729)
-rw-r--r--weed/s3api/filer_multipart.go6
1 files changed, 5 insertions, 1 deletions
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