mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
add etag only for PUT or large chunked uploads
This commit is contained in:
parent
ec2eb8bc48
commit
dc08e4098f
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue