diff options
| author | chrislu <chris.lu@gmail.com> | 2022-08-20 19:15:44 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-08-20 19:15:44 -0700 |
| commit | f8fa430257f6c5658fe20aca8cc0fac8b127079c (patch) | |
| tree | 0bf801f502d031e74fae72c44006085be546abe2 | |
| parent | 4081d50607bbc71b35d042d97497d88cc1fc3427 (diff) | |
| download | seaweedfs-f8fa430257f6c5658fe20aca8cc0fac8b127079c.tar.xz seaweedfs-f8fa430257f6c5658fe20aca8cc0fac8b127079c.zip | |
filer: retryable data chunk upload
| -rw-r--r-- | weed/server/filer_server_handlers_write_autochunk.go | 48 |
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 |
