From 14cb8a24c68ce3fd0d3df716295805a8c5c1b8ef Mon Sep 17 00:00:00 2001 From: hoverseu <529079728@qq.com> Date: Mon, 10 Mar 2025 11:38:26 +0800 Subject: [PATCH] [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) --- weed/server/filer_server_handlers_write_upload.go | 10 ++++++++++ 1 file changed, 10 insertions(+) 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))