aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2018-09-22 22:12:21 -0700
committerChris Lu <chris.lu@gmail.com>2018-09-22 22:12:21 -0700
commit7d6b2a4740c32c3a07a4ce4204da2debee371bcd (patch)
treed60d69c2ed0deea37a63afeabae516551cb090c8
parent420f0683764ce97080ad6fb7dec4df3aa75480bc (diff)
downloadseaweedfs-7d6b2a4740c32c3a07a4ce4204da2debee371bcd.tar.xz
seaweedfs-7d6b2a4740c32c3a07a4ce4204da2debee371bcd.zip
add ETag to upload results and chunks
-rw-r--r--weed/command/filer_copy.go2
-rw-r--r--weed/filesys/dirty_page.go1
-rw-r--r--weed/operation/upload_content.go11
-rw-r--r--weed/server/common.go1
4 files changed, 15 insertions, 0 deletions
diff --git a/weed/command/filer_copy.go b/weed/command/filer_copy.go
index 218abf645..d7b474628 100644
--- a/weed/command/filer_copy.go
+++ b/weed/command/filer_copy.go
@@ -201,6 +201,7 @@ func uploadFileAsOne(filerAddress, filerGrpcAddress string, urlFolder string, f
Offset: 0,
Size: uint64(uploadResult.Size),
Mtime: time.Now().UnixNano(),
+ ETag: uploadResult.ETag,
})
fmt.Printf("copied %s => http://%s%s%s\n", fileName, filerAddress, urlFolder, fileName)
@@ -278,6 +279,7 @@ func uploadFileInChunks(filerAddress, filerGrpcAddress string, urlFolder string,
Offset: i * chunkSize,
Size: uint64(uploadResult.Size),
Mtime: time.Now().UnixNano(),
+ ETag: uploadResult.ETag,
})
fmt.Printf("uploaded %s-%d to %s [%d,%d)\n", fileName, i+1, targetUrl, i*chunkSize, i*chunkSize+int64(uploadResult.Size))
}
diff --git a/weed/filesys/dirty_page.go b/weed/filesys/dirty_page.go
index eb810d383..8bdb12d4d 100644
--- a/weed/filesys/dirty_page.go
+++ b/weed/filesys/dirty_page.go
@@ -187,6 +187,7 @@ func (pages *ContinuousDirtyPages) saveToStorage(ctx context.Context, buf []byte
Offset: offset,
Size: uint64(len(buf)),
Mtime: time.Now().UnixNano(),
+ ETag: uploadResult.ETag,
}, nil
}
diff --git a/weed/operation/upload_content.go b/weed/operation/upload_content.go
index 30c7f1ea3..1fd0ed2b9 100644
--- a/weed/operation/upload_content.go
+++ b/weed/operation/upload_content.go
@@ -22,6 +22,7 @@ type UploadResult struct {
Name string `json:"name,omitempty"`
Size uint32 `json:"size,omitempty"`
Error string `json:"error,omitempty"`
+ ETag string `json:"error,omitempty"`
}
var (
@@ -90,6 +91,7 @@ func upload_content(uploadUrl string, fillBufferFunction func(w io.Writer) error
return nil, post_err
}
defer resp.Body.Close()
+ etag := getEtag(resp)
resp_body, ra_err := ioutil.ReadAll(resp.Body)
if ra_err != nil {
return nil, ra_err
@@ -103,5 +105,14 @@ func upload_content(uploadUrl string, fillBufferFunction func(w io.Writer) error
if ret.Error != "" {
return nil, errors.New(ret.Error)
}
+ ret.ETag = etag
return &ret, nil
}
+
+func getEtag(r *http.Response) (etag string) {
+ etag = r.Header.Get("ETag")
+ if strings.HasPrefix(etag, "\"") && strings.HasSuffix(etag, "\"") {
+ etag = etag[1 : len(etag)-1]
+ }
+ return
+}
diff --git a/weed/server/common.go b/weed/server/common.go
index 2e3053092..12adbf1b4 100644
--- a/weed/server/common.go
+++ b/weed/server/common.go
@@ -123,6 +123,7 @@ func submitForClientHandler(w http.ResponseWriter, r *http.Request, masterUrl st
m["fid"] = assignResult.Fid
m["fileUrl"] = assignResult.PublicUrl + "/" + assignResult.Fid
m["size"] = uploadResult.Size
+ m["eTag"] = uploadResult.ETag
writeJsonQuiet(w, r, http.StatusCreated, m)
return
}