aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-06-07 12:04:50 -0700
committerChris Lu <chris.lu@gmail.com>2021-06-07 12:04:50 -0700
commit5e6dfbc25fab4957d1851f026d25bee6c4d7b59a (patch)
tree3b935e7f19153d617ddbb9600e72f8e82d067d1a
parent452c6ef18313bbf9655c133e5b5ed9456b983006 (diff)
downloadseaweedfs-5e6dfbc25fab4957d1851f026d25bee6c4d7b59a.tar.xz
seaweedfs-5e6dfbc25fab4957d1851f026d25bee6c4d7b59a.zip
locks for data racing
-rw-r--r--weed/server/filer_server_handlers_write_upload.go5
1 files changed, 4 insertions, 1 deletions
diff --git a/weed/server/filer_server_handlers_write_upload.go b/weed/server/filer_server_handlers_write_upload.go
index 32a722507..e28309c6a 100644
--- a/weed/server/filer_server_handlers_write_upload.go
+++ b/weed/server/filer_server_handlers_write_upload.go
@@ -29,7 +29,6 @@ var bufPool = sync.Pool{
}
func (fs *FilerServer) uploadReaderToChunks(w http.ResponseWriter, r *http.Request, reader io.Reader, chunkSize int32, fileName, contentType string, contentLength int64, so *operation.StorageOption) ([]*filer_pb.FileChunk, hash.Hash, int64, error, []byte) {
- var fileChunks []*filer_pb.FileChunk
md5Hash := md5.New()
var partReader = ioutil.NopCloser(io.TeeReader(reader, md5Hash))
@@ -41,6 +40,8 @@ func (fs *FilerServer) uploadReaderToChunks(w http.ResponseWriter, r *http.Reque
var wg sync.WaitGroup
var bytesBufferCounter int64
bytesBufferLimitCond := sync.NewCond(new(sync.Mutex))
+ var fileChunks []*filer_pb.FileChunk
+ var fileChunksLock sync.Mutex
for {
// need to throttle used byte buffer
@@ -94,7 +95,9 @@ func (fs *FilerServer) uploadReaderToChunks(w http.ResponseWriter, r *http.Reque
uploadErr = toChunkErr
}
if chunk != nil {
+ fileChunksLock.Lock()
fileChunks = append(fileChunks, chunk)
+ fileChunksLock.Unlock()
glog.V(4).Infof("uploaded %s chunk %d to %s [%d,%d)", fileName, len(fileChunks), chunk.FileId, offset, offset+int64(chunk.Size))
}
}(chunkOffset)