aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-06-28 01:12:41 -0700
committerChris Lu <chris.lu@gmail.com>2019-06-28 01:12:41 -0700
commit327336ecf392c373838223b3bc74d500f2be4e3f (patch)
tree64088b567633f19355577a81a6599f4a47613dfd
parenta3d1296ed9c914dc2ffef87ba7568edfafc6efac (diff)
downloadseaweedfs-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.go12
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
}