Browse Source
Merge pull request #2035 from kmlebedev/fix_chunks_etag
fix aws style Etag for chunks
pull/2045/head
Chris Lu
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
9 additions and
5 deletions
-
weed/filer/filechunks.go
-
weed/operation/upload_content.go
-
weed/server/filer_server_handlers_write_upload.go
|
|
@ -2,7 +2,6 @@ package filer |
|
|
|
|
|
|
|
import ( |
|
|
|
"bytes" |
|
|
|
"encoding/hex" |
|
|
|
"fmt" |
|
|
|
"github.com/chrislusf/seaweedfs/weed/wdclient" |
|
|
|
"math" |
|
|
@ -43,12 +42,11 @@ func ETagEntry(entry *Entry) (etag string) { |
|
|
|
|
|
|
|
func ETagChunks(chunks []*filer_pb.FileChunk) (etag string) { |
|
|
|
if len(chunks) == 1 { |
|
|
|
return chunks[0].ETag |
|
|
|
return fmt.Sprintf("%x", util.Base64Md5ToBytes(chunks[0].ETag)) |
|
|
|
} |
|
|
|
md5_digests := [][]byte{} |
|
|
|
for _, c := range chunks { |
|
|
|
md5_decoded, _ := hex.DecodeString(c.ETag) |
|
|
|
md5_digests = append(md5_digests, md5_decoded) |
|
|
|
md5_digests = append(md5_digests, util.Base64Md5ToBytes(c.ETag)) |
|
|
|
} |
|
|
|
return fmt.Sprintf("%x-%d", util.Md5(bytes.Join(md5_digests, nil)), len(chunks)) |
|
|
|
} |
|
|
|
|
|
@ -39,7 +39,7 @@ func (uploadResult *UploadResult) ToPbFileChunk(fileId string, offset int64) *fi |
|
|
|
Offset: offset, |
|
|
|
Size: uint64(uploadResult.Size), |
|
|
|
Mtime: time.Now().UnixNano(), |
|
|
|
ETag: uploadResult.ETag, |
|
|
|
ETag: uploadResult.ContentMd5, |
|
|
|
CipherKey: uploadResult.CipherKey, |
|
|
|
IsCompressed: uploadResult.Gzip > 0, |
|
|
|
Fid: fid, |
|
|
|
|
|
@ -1,6 +1,7 @@ |
|
|
|
package weed_server |
|
|
|
|
|
|
|
import ( |
|
|
|
"bytes" |
|
|
|
"crypto/md5" |
|
|
|
"hash" |
|
|
|
"io" |
|
|
@ -71,6 +72,11 @@ func (fs *FilerServer) uploadReaderToChunks(w http.ResponseWriter, r *http.Reque |
|
|
|
if uploadResult.Size == 0 { |
|
|
|
break |
|
|
|
} |
|
|
|
uploadedMd5 := util.Base64Md5ToBytes(uploadResult.ContentMd5) |
|
|
|
readedMd5 := md5Hash.Sum(nil) |
|
|
|
if !bytes.Equal(uploadedMd5, readedMd5) { |
|
|
|
glog.Errorf("md5 %x does not match %x uploaded chunk %s to the volume server", readedMd5, uploadedMd5, uploadResult.Name) |
|
|
|
} |
|
|
|
|
|
|
|
// Save to chunk manifest structure
|
|
|
|
fileChunks = append(fileChunks, uploadResult.ToPbFileChunk(fileId, chunkOffset)) |
|
|
|