add etag only for PUT or large chunked uploads

This commit is contained in:
Chris Lu 2020-04-08 09:13:26 -07:00
parent ec2eb8bc48
commit dc08e4098f
3 changed files with 20 additions and 5 deletions

View file

@ -22,14 +22,14 @@ func TotalSize(chunks []*filer_pb.FileChunk) (size uint64) {
func ETag(entry *filer_pb.Entry) (etag string) { func ETag(entry *filer_pb.Entry) (etag string) {
if entry.Attributes == nil || entry.Attributes.Md5 == nil { if entry.Attributes == nil || entry.Attributes.Md5 == nil {
ETagChunks(entry.Chunks) return ETagChunks(entry.Chunks)
} }
return fmt.Sprintf("%x", entry.Attributes.Md5) return fmt.Sprintf("%x", entry.Attributes.Md5)
} }
func ETagEntry(entry *Entry) (etag string) { func ETagEntry(entry *Entry) (etag string) {
if entry.Attr.Md5 == nil { if entry.Attr.Md5 == nil {
ETagChunks(entry.Chunks) return ETagChunks(entry.Chunks)
} }
return fmt.Sprintf("%x", entry.Attr.Md5) return fmt.Sprintf("%x", entry.Attr.Md5)
} }

View file

@ -220,8 +220,13 @@ func (fs *FilerServer) uploadToVolumeServer(r *http.Request, u *url.URL, auth se
defer func() { stats.FilerRequestHistogram.WithLabelValues("postUpload").Observe(time.Since(start).Seconds()) }() defer func() { stats.FilerRequestHistogram.WithLabelValues("postUpload").Observe(time.Since(start).Seconds()) }()
ret = &operation.UploadResult{} ret = &operation.UploadResult{}
md5Hash := md5.New() md5Hash := md5.New()
var body = ioutil.NopCloser(io.TeeReader(r.Body, md5Hash)) body := r.Body
if r.Method == "PUT" {
// only PUT or large chunked files has Md5 in attributes
body = ioutil.NopCloser(io.TeeReader(r.Body, md5Hash))
}
request := &http.Request{ request := &http.Request{
Method: r.Method, Method: r.Method,
@ -286,8 +291,10 @@ func (fs *FilerServer) uploadToVolumeServer(r *http.Request, u *url.URL, auth se
} }
} }
// use filer calculated md5 ETag, instead of the volume server crc ETag // use filer calculated md5 ETag, instead of the volume server crc ETag
md5value = md5Hash.Sum(nil) if r.Method == "PUT" {
ret.ETag = fmt.Sprintf("%x", md5value) md5value = md5Hash.Sum(nil)
}
ret.ETag = getEtag(resp)
return return
} }

View file

@ -166,3 +166,11 @@ func setEtag(w http.ResponseWriter, etag string) {
} }
} }
} }
func getEtag(resp *http.Response) (etag string){
etag = resp.Header.Get("ETag")
if strings.HasPrefix(etag, "\"") && strings.HasSuffix(etag, "\""){
return etag[1:len(etag)-1]
}
return
}