aboutsummaryrefslogtreecommitdiff
path: root/weed/server
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-08-26 16:16:26 -0700
committerChris Lu <chris.lu@gmail.com>2021-08-26 16:16:26 -0700
commit6a0bb7106bc7c3524991f8a2a5b78d636613095d (patch)
tree9f760e5e41335b7add1a35c8bc2dc3f8273b3b4b /weed/server
parent05a648bb96df1be5a9261737d8f6fd01600c6a63 (diff)
downloadseaweedfs-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.go5
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
}