diff options
| author | Chris Lu <chris.lu@uber.com> | 2021-04-05 19:40:12 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@uber.com> | 2021-04-05 19:40:12 -0700 |
| commit | c131764c348060ae6103c2a3f83b1b42e5ec04b0 (patch) | |
| tree | b83c22bc888084feedc5a9a11997f1b55e116564 | |
| parent | 0a9d76c9eb4cab98498d42c69fd3c698d97779fb (diff) | |
| download | seaweedfs-c131764c348060ae6103c2a3f83b1b42e5ec04b0.tar.xz seaweedfs-c131764c348060ae6103c2a3f83b1b42e5ec04b0.zip | |
ensure error is sent back in channel
fix https://github.com/chrislusf/seaweedfs/issues/1966
avoid shared readErr variable
| -rw-r--r-- | weed/server/filer_server_handlers_write_upload.go | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/weed/server/filer_server_handlers_write_upload.go b/weed/server/filer_server_handlers_write_upload.go index 28aad8c5a..03db942c6 100644 --- a/weed/server/filer_server_handlers_write_upload.go +++ b/weed/server/filer_server_handlers_write_upload.go @@ -57,26 +57,27 @@ func (fs *FilerServer) uploadReaderToChunks(w http.ResponseWriter, r *http.Reque var lock sync.Mutex readOffset := int64(0) var wg sync.WaitGroup - var readErr error - for readErr == nil { + for err == nil { wg.Add(1) request := func() { defer wg.Done() var localOffset int64 - var data []byte // read from the input lock.Lock() localOffset = readOffset limitedReader := io.LimitReader(partReader, int64(chunkSize)) - data, readErr = ioutil.ReadAll(limitedReader) + data, readErr := ioutil.ReadAll(limitedReader) readOffset += int64(len(data)) lock.Unlock() // handle read errors if readErr != nil { if readErr != io.EOF { + if err == nil { + err = readErr + } resultsChan <- &ChunkCreationResult{ err: readErr, } @@ -92,6 +93,9 @@ func (fs *FilerServer) uploadReaderToChunks(w http.ResponseWriter, r *http.Reque dataReader := util.NewBytesReader(data) fileId, uploadResult, uploadErr := fs.doCreateChunk(w, r, so, dataReader, fileName, contentType) if uploadErr != nil { + if err == nil { + err = uploadErr + } resultsChan <- &ChunkCreationResult{ err: uploadErr, } |
