diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2020-10-05 09:46:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-05 09:46:27 -0700 |
| commit | 875ee5c0d484fbb46289d34b21aea8f3d8de9344 (patch) | |
| tree | f94071204dc465ca5c316faa9eabf92b24fb52e5 | |
| parent | 4fc673341f85162b06d612cb18f8a3870546a4cf (diff) | |
| parent | e4f2d9eb4a592a9d8cbf2c999eea397a7fc502ec (diff) | |
| download | seaweedfs-875ee5c0d484fbb46289d34b21aea8f3d8de9344.tar.xz seaweedfs-875ee5c0d484fbb46289d34b21aea8f3d8de9344.zip | |
Merge pull request #1508 from kmlebedev/s3_etag_like_aws
We return etag using the same algorithm as aws s3
| -rw-r--r-- | weed/filer/filechunks.go | 12 | ||||
| -rw-r--r-- | weed/server/volume_server_handlers_write.go | 3 |
2 files changed, 9 insertions, 6 deletions
diff --git a/weed/filer/filechunks.go b/weed/filer/filechunks.go index db55eec00..c75a35f79 100644 --- a/weed/filer/filechunks.go +++ b/weed/filer/filechunks.go @@ -1,13 +1,15 @@ package filer import ( + "bytes" + "encoding/hex" "fmt" - "hash/fnv" "math" "sort" "sync" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" + "github.com/chrislusf/seaweedfs/weed/util" ) func TotalSize(chunks []*filer_pb.FileChunk) (size uint64) { @@ -42,12 +44,12 @@ func ETagChunks(chunks []*filer_pb.FileChunk) (etag string) { if len(chunks) == 1 { return chunks[0].ETag } - - h := fnv.New32a() + md5_digests := [][]byte{} for _, c := range chunks { - h.Write([]byte(c.ETag)) + md5_decoded, _ := hex.DecodeString(c.ETag) + md5_digests = append(md5_digests, md5_decoded) } - return fmt.Sprintf("%x", h.Sum32()) + return fmt.Sprintf("%x-%d", util.Md5(bytes.Join(md5_digests, nil)), len(chunks)) } func CompactFileChunks(lookupFileIdFn LookupFileIdFunctionType, chunks []*filer_pb.FileChunk) (compacted, garbage []*filer_pb.FileChunk) { diff --git a/weed/server/volume_server_handlers_write.go b/weed/server/volume_server_handlers_write.go index 78cbf08c5..01a77b901 100644 --- a/weed/server/volume_server_handlers_write.go +++ b/weed/server/volume_server_handlers_write.go @@ -13,6 +13,7 @@ import ( "github.com/chrislusf/seaweedfs/weed/stats" "github.com/chrislusf/seaweedfs/weed/storage/needle" "github.com/chrislusf/seaweedfs/weed/topology" + "github.com/chrislusf/seaweedfs/weed/util" ) func (vs *VolumeServer) PostHandler(w http.ResponseWriter, r *http.Request) { @@ -67,7 +68,7 @@ func (vs *VolumeServer) PostHandler(w http.ResponseWriter, r *http.Request) { ret.Name = string(reqNeedle.Name) } ret.Size = uint32(originalSize) - ret.ETag = reqNeedle.Etag() + ret.ETag = fmt.Sprintf("%x", util.Base64Md5ToBytes(contentMd5)) ret.Mime = string(reqNeedle.Mime) setEtag(w, ret.ETag) w.Header().Set("Content-MD5", contentMd5) |
