From d37a00ef2084cbe3e928137340243c44fe505fdd Mon Sep 17 00:00:00 2001 From: Nan Li Date: Wed, 9 Aug 2023 11:35:46 +0000 Subject: [PATCH] optimize: resume nydusd processes parallelizilly This patch allows the snapshotter resumes the recovering nydusd daemons parallelizilly in the starting stage. Signed-off-by: Nan Li --- pkg/filesystem/fs.go | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/pkg/filesystem/fs.go b/pkg/filesystem/fs.go index 85046841a9..e83851f9a7 100644 --- a/pkg/filesystem/fs.go +++ b/pkg/filesystem/fs.go @@ -18,6 +18,7 @@ import ( "github.com/mohae/deepcopy" "github.com/opencontainers/go-digest" "github.com/pkg/errors" + "golang.org/x/sync/errgroup" "github.com/containerd/containerd/log" "github.com/containerd/containerd/snapshots" @@ -120,22 +121,30 @@ func NewFileSystem(ctx context.Context, opt ...NewFSOpt) (*Filesystem, error) { } // Try to bring all persisted and stopped nydusd up and remount Rafs + eg, _ := errgroup.WithContext(context.Background()) for _, d := range recoveringDaemons { - d.ClearVestige() - fsManager, err := fs.getManager(d.States.FsDriver) - if err != nil { - return nil, errors.Wrapf(err, "get filesystem manager for daemon %s", d.States.ID) - } - if err := fsManager.StartDaemon(d); err != nil { - return nil, errors.Wrapf(err, "start daemon %s", d.ID()) - } - if err := d.WaitUntilState(types.DaemonStateRunning); err != nil { - return nil, errors.Wrapf(err, "wait for daemon %s", d.ID()) - } - if err := d.RecoveredMountInstances(); err != nil { - return nil, errors.Wrapf(err, "recover mounts for daemon %s", d.ID()) - } - fs.TryRetainSharedDaemon(d) + d := d + eg.Go(func() error { + d.ClearVestige() + fsManager, err := fs.getManager(d.States.FsDriver) + if err != nil { + return errors.Wrapf(err, "get filesystem manager for daemon %s", d.States.ID) + } + if err := fsManager.StartDaemon(d); err != nil { + return errors.Wrapf(err, "start daemon %s", d.ID()) + } + if err := d.WaitUntilState(types.DaemonStateRunning); err != nil { + return errors.Wrapf(err, "wait for daemon %s", d.ID()) + } + if err := d.RecoveredMountInstances(); err != nil { + return errors.Wrapf(err, "recover mounts for daemon %s", d.ID()) + } + fs.TryRetainSharedDaemon(d) + return nil + }) + } + if err := eg.Wait(); err != nil { + return nil, err } for _, d := range liveDaemons {