aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api
diff options
context:
space:
mode:
authorlyg <lyg@portsip.cn>2021-07-02 11:00:42 +0800
committerlyg <lyg@portsip.cn>2021-07-02 11:00:42 +0800
commit1a4db87e19a577873d7f354673ac1cbf825597ae (patch)
tree34ad1bd9c10252e40b0617598f3539d31773d5a5 /weed/s3api
parentc6d4c16079875dfbe0d350b83fbacccaaa9c15db (diff)
downloadseaweedfs-1a4db87e19a577873d7f354673ac1cbf825597ae.tar.xz
seaweedfs-1a4db87e19a577873d7f354673ac1cbf825597ae.zip
fix s3 metadata error with multipart upload
Diffstat (limited to 'weed/s3api')
-rw-r--r--weed/s3api/filer_multipart.go17
-rw-r--r--weed/s3api/filer_util.go4
2 files changed, 18 insertions, 3 deletions
diff --git a/weed/s3api/filer_multipart.go b/weed/s3api/filer_multipart.go
index 61132c082..5d7bf2ac3 100644
--- a/weed/s3api/filer_multipart.go
+++ b/weed/s3api/filer_multipart.go
@@ -71,6 +71,12 @@ func (s3a *S3ApiServer) completeMultipartUpload(input *s3.CompleteMultipartUploa
return nil, s3err.ErrNoSuchUpload
}
+ pentry, err := s3a.getEntry(s3a.genUploadsFolder(*input.Bucket),*input.UploadId)
+ if err != nil {
+ glog.Errorf("completeMultipartUpload %s %s error: %v", *input.Bucket, *input.UploadId, err)
+ return nil, s3err.ErrNoSuchUpload
+ }
+
var finalParts []*filer_pb.FileChunk
var offset int64
@@ -106,7 +112,16 @@ func (s3a *S3ApiServer) completeMultipartUpload(input *s3.CompleteMultipartUploa
dirName = dirName[:len(dirName)-1]
}
- err = s3a.mkFile(dirName, entryName, finalParts)
+ err = s3a.mkFile(dirName, entryName, finalParts,func(entry *filer_pb.Entry) {
+ if entry.Extended == nil {
+ entry.Extended = make(map[string][]byte)
+ }
+ for k,v := range pentry.Extended{
+ if k != "key" {
+ entry.Extended[k] = v
+ }
+ }
+ })
if err != nil {
glog.Errorf("completeMultipartUpload %s/%s error: %v", dirName, entryName, err)
diff --git a/weed/s3api/filer_util.go b/weed/s3api/filer_util.go
index 1803332a3..92267a154 100644
--- a/weed/s3api/filer_util.go
+++ b/weed/s3api/filer_util.go
@@ -15,9 +15,9 @@ func (s3a *S3ApiServer) mkdir(parentDirectoryPath string, dirName string, fn fun
}
-func (s3a *S3ApiServer) mkFile(parentDirectoryPath string, fileName string, chunks []*filer_pb.FileChunk) error {
+func (s3a *S3ApiServer) mkFile(parentDirectoryPath string, fileName string, chunks []*filer_pb.FileChunk, fn func(entry *filer_pb.Entry)) error {
- return filer_pb.MkFile(s3a, parentDirectoryPath, fileName, chunks)
+ return filer_pb.MkFile(s3a, parentDirectoryPath, fileName, chunks,fn)
}