aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-08-20 19:15:44 -0700
committerchrislu <chris.lu@gmail.com>2022-08-20 19:15:44 -0700
commitf8fa430257f6c5658fe20aca8cc0fac8b127079c (patch)
tree0bf801f502d031e74fae72c44006085be546abe2
parent4081d50607bbc71b35d042d97497d88cc1fc3427 (diff)
downloadseaweedfs-f8fa430257f6c5658fe20aca8cc0fac8b127079c.tar.xz
seaweedfs-f8fa430257f6c5658fe20aca8cc0fac8b127079c.zip
filer: retryable data chunk upload
-rw-r--r--weed/server/filer_server_handlers_write_autochunk.go48
1 files changed, 30 insertions, 18 deletions
diff --git a/weed/server/filer_server_handlers_write_autochunk.go b/weed/server/filer_server_handlers_write_autochunk.go
index ad14c0f12..a1dc9c8d6 100644
--- a/weed/server/filer_server_handlers_write_autochunk.go
+++ b/weed/server/filer_server_handlers_write_autochunk.go
@@ -256,25 +256,37 @@ func (fs *FilerServer) saveMetaData(ctx context.Context, r *http.Request, fileNa
func (fs *FilerServer) saveAsChunk(so *operation.StorageOption) filer.SaveDataAsChunkFunctionType {
return func(reader io.Reader, name string, offset int64) (*filer_pb.FileChunk, error) {
- // assign one file id for one chunk
- fileId, urlLocation, auth, assignErr := fs.assignNewFileInfo(so)
- if assignErr != nil {
- return nil, assignErr
- }
+ var fileId string
+ var uploadResult *operation.UploadResult
+
+ err := util.Retry("saveAsChunk", func() error {
+ // assign one file id for one chunk
+ assignedFileId, urlLocation, auth, assignErr := fs.assignNewFileInfo(so)
+ if assignErr != nil {
+ return assignErr
+ }
- // upload the chunk to the volume server
- uploadOption := &operation.UploadOption{
- UploadUrl: urlLocation,
- Filename: name,
- Cipher: fs.option.Cipher,
- IsInputCompressed: false,
- MimeType: "",
- PairMap: nil,
- Jwt: auth,
- }
- uploadResult, uploadErr, _ := operation.Upload(reader, uploadOption)
- if uploadErr != nil {
- return nil, uploadErr
+ fileId = assignedFileId
+
+ // upload the chunk to the volume server
+ uploadOption := &operation.UploadOption{
+ UploadUrl: urlLocation,
+ Filename: name,
+ Cipher: fs.option.Cipher,
+ IsInputCompressed: false,
+ MimeType: "",
+ PairMap: nil,
+ Jwt: auth,
+ }
+ var uploadErr error
+ uploadResult, uploadErr, _ = operation.Upload(reader, uploadOption)
+ if uploadErr != nil {
+ return uploadErr
+ }
+ return nil
+ })
+ if err != nil {
+ return nil, err
}
return uploadResult.ToPbFileChunk(fileId, offset), nil