Browse Source

ensure error is sent back in channel

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

avoid shared readErr variable
pull/1973/head
Chris Lu 4 years ago
parent
commit
c131764c34
  1. 12
      weed/server/filer_server_handlers_write_upload.go

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

Loading…
Cancel
Save