diff options
| author | hoverseu <529079728@qq.com> | 2025-03-10 11:38:26 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-09 20:38:26 -0700 |
| commit | 14cb8a24c68ce3fd0d3df716295805a8c5c1b8ef (patch) | |
| tree | 2a9814c561f0879aad1cdd4d7bf52f6e0e55fb3b | |
| parent | 271505717e8292e909b2daf7d63c56babdb17e00 (diff) | |
| download | seaweedfs-14cb8a24c68ce3fd0d3df716295805a8c5c1b8ef.tar.xz seaweedfs-14cb8a24c68ce3fd0d3df716295805a8c5c1b8ef.zip | |
[filer] UploadRequestToChunks: terminate the upload of remaining chunks as early as possible might be more reasonable when one chunk upload goroutine encounters a failure. (#6610)
| -rw-r--r-- | weed/server/filer_server_handlers_write_upload.go | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/weed/server/filer_server_handlers_write_upload.go b/weed/server/filer_server_handlers_write_upload.go index 79f794110..e34fe27e6 100644 --- a/weed/server/filer_server_handlers_write_upload.go +++ b/weed/server/filer_server_handlers_write_upload.go @@ -64,6 +64,16 @@ func (fs *FilerServer) uploadReaderToChunks(reader io.Reader, startOffset int64, // need to throttle used byte buffer bytesBufferLimitChan <- struct{}{} + // As long as there is an error in the upload of one chunk, it can be terminated early + // uploadErr may be modified in other go routines, lock is needed to avoid race condition + uploadErrLock.Lock() + if uploadErr != nil { + <-bytesBufferLimitChan + uploadErrLock.Unlock() + break + } + uploadErrLock.Unlock() + bytesBuffer := bufPool.Get().(*bytes.Buffer) limitedReader := io.LimitReader(partReader, int64(chunkSize)) |
