diff options
| author | Chris Lu <chris.lu@gmail.com> | 2021-08-26 16:16:26 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2021-08-26 16:16:26 -0700 |
| commit | 6a0bb7106bc7c3524991f8a2a5b78d636613095d (patch) | |
| tree | 9f760e5e41335b7add1a35c8bc2dc3f8273b3b4b /weed/server | |
| parent | 05a648bb96df1be5a9261737d8f6fd01600c6a63 (diff) | |
| download | seaweedfs-6a0bb7106bc7c3524991f8a2a5b78d636613095d.tar.xz seaweedfs-6a0bb7106bc7c3524991f8a2a5b78d636613095d.zip | |
cloud drive: parallelize remote storage downloading
Diffstat (limited to 'weed/server')
| -rw-r--r-- | weed/server/filer_grpc_server_remote.go | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/weed/server/filer_grpc_server_remote.go b/weed/server/filer_grpc_server_remote.go index 6ceaa3013..8064431c5 100644 --- a/weed/server/filer_grpc_server_remote.go +++ b/weed/server/filer_grpc_server_remote.go @@ -12,6 +12,7 @@ import ( "github.com/chrislusf/seaweedfs/weed/util" "github.com/golang/protobuf/proto" "strings" + "sync" "time" ) @@ -80,12 +81,15 @@ func (fs *FilerServer) DownloadToLocal(ctx context.Context, req *filer_pb.Downlo var chunks []*filer_pb.FileChunk var fetchAndWriteErr error + var wg sync.WaitGroup limitedConcurrentExecutor := util.NewLimitedConcurrentExecutor(8) for offset := int64(0); offset < entry.Remote.RemoteSize; offset += chunkSize { localOffset := offset + wg.Add(1) limitedConcurrentExecutor.Execute(func() { + defer wg.Done() size := chunkSize if localOffset+chunkSize > entry.Remote.RemoteSize { size = entry.Remote.RemoteSize - localOffset @@ -147,6 +151,7 @@ func (fs *FilerServer) DownloadToLocal(ctx context.Context, req *filer_pb.Downlo }) } + wg.Wait() if fetchAndWriteErr != nil { return nil, fetchAndWriteErr } |
