ensure error is sent back in channel

fix https://github.com/chrislusf/seaweedfs/issues/1966

avoid shared readErr variable
This commit is contained in:
Chris Lu 2021-04-05 19:40:12 -07:00
parent 0a9d76c9eb
commit c131764c34

View file

@ -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,
}