From f8d3ff466d8d2360c39132910710f5a33cf2b2be Mon Sep 17 00:00:00 2001 From: Viktor Kuzmin Date: Fri, 7 Oct 2022 21:27:15 +0300 Subject: [PATCH] Allow parallel volume loading from different dirs during startup. (#3802) --- weed/storage/store.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/weed/storage/store.go b/weed/storage/store.go index 8dea7496d..aa5c1809f 100644 --- a/weed/storage/store.go +++ b/weed/storage/store.go @@ -5,6 +5,7 @@ import ( "io" "path/filepath" "strings" + "sync" "sync/atomic" "github.com/seaweedfs/seaweedfs/weed/pb" @@ -82,12 +83,21 @@ func NewStore(grpcDialOption grpc.DialOption, ip string, port int, grpcPort int, minFreeSpaces []util.MinFreeSpace, idxFolder string, needleMapKind NeedleMapKind, diskTypes []DiskType) (s *Store) { s = &Store{grpcDialOption: grpcDialOption, Port: port, Ip: ip, GrpcPort: grpcPort, PublicUrl: publicUrl, NeedleMapKind: needleMapKind} s.Locations = make([]*DiskLocation, 0) + + var wg sync.WaitGroup for i := 0; i < len(dirnames); i++ { location := NewDiskLocation(dirnames[i], int32(maxVolumeCounts[i]), minFreeSpaces[i], idxFolder, diskTypes[i]) - location.loadExistingVolumes(needleMapKind) s.Locations = append(s.Locations, location) stats.VolumeServerMaxVolumeCounter.Add(float64(maxVolumeCounts[i])) + + wg.Add(1) + go func() { + defer wg.Done() + location.loadExistingVolumes(needleMapKind) + }() } + wg.Wait() + s.NewVolumesChan = make(chan master_pb.VolumeShortInformationMessage, 3) s.DeletedVolumesChan = make(chan master_pb.VolumeShortInformationMessage, 3)