Browse Source

Merge pull request #2174 from qwedsazzcc/master

fix s3 metadata error with multipart upload
pull/2178/head
Chris Lu 4 years ago
committed by GitHub
parent
commit
3d9ec2e0b6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      weed/pb/filer_pb/filer_client.go
  2. 17
      weed/s3api/filer_multipart.go
  3. 4
      weed/s3api/filer_util.go

6
weed/pb/filer_pb/filer_client.go

@ -236,7 +236,7 @@ func Mkdir(filerClient FilerClient, parentDirectoryPath string, dirName string,
}) })
} }
func MkFile(filerClient FilerClient, parentDirectoryPath string, fileName string, chunks []*FileChunk) error {
func MkFile(filerClient FilerClient, parentDirectoryPath string, fileName string, chunks []*FileChunk, fn func(entry *Entry)) error {
return filerClient.WithFilerClient(func(client SeaweedFilerClient) error { return filerClient.WithFilerClient(func(client SeaweedFilerClient) error {
entry := &Entry{ entry := &Entry{
@ -252,6 +252,10 @@ func MkFile(filerClient FilerClient, parentDirectoryPath string, fileName string
Chunks: chunks, Chunks: chunks,
} }
if fn != nil {
fn(entry)
}
request := &CreateEntryRequest{ request := &CreateEntryRequest{
Directory: parentDirectoryPath, Directory: parentDirectoryPath,
Entry: entry, Entry: entry,

17
weed/s3api/filer_multipart.go

@ -71,6 +71,12 @@ func (s3a *S3ApiServer) completeMultipartUpload(input *s3.CompleteMultipartUploa
return nil, s3err.ErrNoSuchUpload 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 finalParts []*filer_pb.FileChunk
var offset int64 var offset int64
@ -106,7 +112,16 @@ func (s3a *S3ApiServer) completeMultipartUpload(input *s3.CompleteMultipartUploa
dirName = dirName[:len(dirName)-1] 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 { if err != nil {
glog.Errorf("completeMultipartUpload %s/%s error: %v", dirName, entryName, err) glog.Errorf("completeMultipartUpload %s/%s error: %v", dirName, entryName, err)

4
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)
} }

Loading…
Cancel
Save