aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfamosss <zzq09494@ly.com>2022-11-10 23:17:29 +0800
committerGitHub <noreply@github.com>2022-11-10 07:17:29 -0800
commitdf0662038c99a4d0c883464371272d1ab7ec19e6 (patch)
treeab44a673f7f9fba4e82357e8e265001be8bd0c47
parent180853a2c9355aaa415badb5b8300bff703452b1 (diff)
downloadseaweedfs-df0662038c99a4d0c883464371272d1ab7ec19e6.tar.xz
seaweedfs-df0662038c99a4d0c883464371272d1ab7ec19e6.zip
feat:add a uuid after uploadid (#3963)
-rw-r--r--weed/s3api/filer_multipart.go3
-rw-r--r--weed/s3api/s3api_object_multipart_handlers.go5
2 files changed, 6 insertions, 2 deletions
diff --git a/weed/s3api/filer_multipart.go b/weed/s3api/filer_multipart.go
index 71b93a202..0167b5906 100644
--- a/weed/s3api/filer_multipart.go
+++ b/weed/s3api/filer_multipart.go
@@ -4,6 +4,7 @@ import (
"encoding/hex"
"encoding/xml"
"fmt"
+ "github.com/google/uuid"
"github.com/seaweedfs/seaweedfs/weed/s3api/s3err"
"golang.org/x/exp/slices"
"math"
@@ -32,6 +33,8 @@ func (s3a *S3ApiServer) createMultipartUpload(input *s3.CreateMultipartUploadInp
uploadIdString := s3a.generateUploadID(*input.Key)
+ uploadIdString = uploadIdString + "_" +strings.ReplaceAll(uuid.New().String(),"-","")
+
if err := s3a.mkdir(s3a.genUploadsFolder(*input.Bucket), uploadIdString, func(entry *filer_pb.Entry) {
if entry.Extended == nil {
entry.Extended = make(map[string][]byte)
diff --git a/weed/s3api/s3api_object_multipart_handlers.go b/weed/s3api/s3api_object_multipart_handlers.go
index 96000310c..d30e65ad9 100644
--- a/weed/s3api/s3api_object_multipart_handlers.go
+++ b/weed/s3api/s3api_object_multipart_handlers.go
@@ -284,8 +284,9 @@ func (s3a *S3ApiServer) generateUploadID(object string) string {
// Check object name and uploadID when processing multipart uploading
func (s3a *S3ApiServer) checkUploadId(object string, id string) error {
- hash := s3a.generateUploadID(object)
- if hash != id {
+ hash := s3a.generateUploadID(strings.Split(object, "_")[0])
+
+ if !strings.HasPrefix(id, hash) {
glog.Errorf("object %s and uploadID %s are not matched", object, id)
return fmt.Errorf("object %s and uploadID %s are not matched", object, id)
}