diff options
| author | Chris Lu <chris.lu@gmail.com> | 2019-06-28 01:12:41 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2019-06-28 01:12:41 -0700 |
| commit | 327336ecf392c373838223b3bc74d500f2be4e3f (patch) | |
| tree | 64088b567633f19355577a81a6599f4a47613dfd | |
| parent | a3d1296ed9c914dc2ffef87ba7568edfafc6efac (diff) | |
| download | seaweedfs-327336ecf392c373838223b3bc74d500f2be4e3f.tar.xz seaweedfs-327336ecf392c373838223b3bc74d500f2be4e3f.zip | |
filer: avoid concurrent modification to result slice
fix https://github.com/chrislusf/seaweedfs/issues/972
| -rw-r--r-- | weed/operation/delete_content.go | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/weed/operation/delete_content.go b/weed/operation/delete_content.go index cfe2feae8..6d84be76f 100644 --- a/weed/operation/delete_content.go +++ b/weed/operation/delete_content.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/volume_server_pb" "google.golang.org/grpc" "net/http" @@ -84,8 +85,8 @@ func DeleteFilesWithLookupVolumeId(grpcDialOption grpc.DialOption, fileIds []str } } + resultChan := make(chan []*volume_server_pb.DeleteResult, len(server_to_fileIds)) var wg sync.WaitGroup - for server, fidList := range server_to_fileIds { wg.Add(1) go func(server string, fidList []string) { @@ -94,12 +95,19 @@ func DeleteFilesWithLookupVolumeId(grpcDialOption grpc.DialOption, fileIds []str if deleteResults, deleteErr := DeleteFilesAtOneVolumeServer(server, grpcDialOption, fidList); deleteErr != nil { err = deleteErr } else { - ret = append(ret, deleteResults...) + resultChan <- deleteResults } }(server, fidList) } wg.Wait() + close(resultChan) + + for result := range resultChan { + ret = append(ret, result...) + } + + glog.V(0).Infof("deleted %d items", len(ret)) return ret, err } |
