diff --git a/pkg/daemon/daemon.go b/pkg/daemon/daemon.go index b939620572..7e73c5bfa6 100644 --- a/pkg/daemon/daemon.go +++ b/pkg/daemon/daemon.go @@ -211,23 +211,7 @@ func (d *Daemon) SharedMount(rafs *Rafs) error { return errors.Wrapf(err, "mount instance %s", rafs.SnapshotID) } - defer func() { - su := d.Supervisor - if su != nil { - // TODO: This should be optional by checking snapshotter's configuration. - // FIXME: Is it possible the states are overwritten during two API mounts. - // FIXME: What if nydusd does not support sending states. - err = su.FetchDaemonStates(func() error { - if err := d.SendStates(); err != nil { - return errors.Wrapf(err, "send daemon %s states", d.ID()) - } - return nil - }) - if err != nil { - log.L.Warnf("Daemon %s does not support sending states, %v", d.ID(), err) - } - } - }() + defer d.SendStates() if d.States.FsDriver == config.FsDriverFscache { if err := d.sharedErofsMount(rafs); err != nil { @@ -266,6 +250,8 @@ func (d *Daemon) SharedUmount(rafs *Rafs) error { return errors.Wrapf(err, "umount instance %s", rafs.SnapshotID) } + defer d.SendStates() + if d.States.FsDriver == config.FsDriverFscache { if err := d.sharedErofsUmount(rafs); err != nil { return errors.Wrapf(err, "failed to erofs mount") @@ -357,7 +343,25 @@ func (d *Daemon) sharedErofsUmount(rafs *Rafs) error { return nil } -func (d *Daemon) SendStates() error { +func (d *Daemon) SendStates() { + su := d.Supervisor + if su != nil { + // TODO: This should be optional by checking snapshotter's configuration. + // FIXME: Is it possible the states are overwritten during two API mounts. + // FIXME: What if nydusd does not support sending states. + err := su.FetchDaemonStates(func() error { + if err := d.doSendStates(); err != nil { + return errors.Wrapf(err, "send daemon %s states", d.ID()) + } + return nil + }) + if err != nil { + log.L.Warnf("Daemon %s does not support sending states, %v", d.ID(), err) + } + } +} + +func (d *Daemon) doSendStates() error { c, err := d.GetClient() if err != nil { return errors.Wrapf(err, "send states %s", d.ID()) diff --git a/pkg/manager/daemon_adaptor.go b/pkg/manager/daemon_adaptor.go index a60cb78e92..63882e1d42 100644 --- a/pkg/manager/daemon_adaptor.go +++ b/pkg/manager/daemon_adaptor.go @@ -99,21 +99,7 @@ func (m *Manager) StartDaemon(d *daemon.Daemon) error { collector.NewDaemonInfoCollector(&d.Version, 1).Collect() d.Unlock() - if d.Supervisor == nil { - return - } - - su := d.Supervisor - err = su.FetchDaemonStates(func() error { - if err := d.SendStates(); err != nil { - return errors.Wrapf(err, "send daemon %s states", d.ID()) - } - return nil - }) - if err != nil { - log.L.Errorf("send states") - return - } + d.SendStates() }() return nil diff --git a/pkg/manager/manager.go b/pkg/manager/manager.go index 547c23b09e..07adae9a82 100644 --- a/pkg/manager/manager.go +++ b/pkg/manager/manager.go @@ -566,19 +566,7 @@ func (m *Manager) Recover(ctx context.Context) (map[string]*daemon.Daemon, map[s } // Snapshotter's lost the daemons' states after exit, refetch them. - su := d.Supervisor - if su != nil { - err = su.FetchDaemonStates(func() error { - if err := d.SendStates(); err != nil { - return errors.Wrapf(err, "send daemon %s states", d.ID()) - } - return nil - }) - if err != nil { - log.L.Errorf("Send daemon %s states", d.ID()) - return - } - } + d.SendStates() }() return nil