Skip to content

Commit e384ffd

Browse files
authored
filesystem: adjust live daemon binary check (#699)
Commit b5bceed introduced a regression where nydusd binary is required even for proxy mode (used by Kata Containers for guest pulling) where no nydusd daemon runs on the host. The hot upgrade logic now unconditionally calls GetDaemonGitCommit() which fails when nydusd binary doesn't exist. This breaks proxy mode deployments where only the snapshotter runs on the host. Fix by only checking for the nydusd binary when nydusd is already running. Fixes regression from: b5bceed Signed-off-by: Fabiano Fidêncio <[email protected]> Signed-off-by: Zephyr <[email protected]>
1 parent b2a933d commit e384ffd

File tree

1 file changed

+36
-33
lines changed

1 file changed

+36
-33
lines changed

pkg/filesystem/fs.go

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -157,44 +157,47 @@ func NewFileSystem(ctx context.Context, opt ...NewFSOpt) (*Filesystem, error) {
157157
return nil, err
158158
}
159159

160-
newNydusImageBinaryCommit, err := daemon.GetDaemonGitCommit(fs.nydusdBinaryPath)
161-
if err != nil {
162-
return nil, errors.Wrapf(err, "failed to get git commit from nydusd binary at path: %s", fs.nydusdBinaryPath)
163-
}
160+
// Only check nydusd binary commit when there are live daemons that may need hot upgrade.
161+
if len(liveDaemons) > 0 {
162+
newNydusImageBinaryCommit, err := daemon.GetDaemonGitCommit(fs.nydusdBinaryPath)
163+
if err != nil {
164+
return nil, errors.Wrapf(err, "failed to get git commit from nydusd binary at path: %s", fs.nydusdBinaryPath)
165+
}
164166

165-
egLive, _ := errgroup.WithContext(context.Background())
166-
for _, d := range liveDaemons {
167-
d := d
168-
egLive.Go(func() error {
169-
if d.Supervisor == nil {
170-
log.L.Warnf("Daemon %s is skipped for hot upgrade because recover policy is not set to 'failover'", d.ID())
171-
return nil
172-
}
173-
daemonInfo, err := d.GetDaemonInfo()
174-
if err != nil {
175-
log.L.Warnf("Failed to get daemon info from daemon %s, skipping: %v", d.ID(), err)
176-
return nil
177-
}
178-
if newNydusImageBinaryCommit != daemonInfo.DaemonVersion().GitCommit {
179-
fsManager, err := fs.getManager(d.States.FsDriver)
180-
if err != nil {
181-
log.L.Warnf("Failed to get filesystem manager for daemon %s, skipping: %v", d.ID(), err)
167+
egLive, _ := errgroup.WithContext(context.Background())
168+
for _, d := range liveDaemons {
169+
d := d
170+
egLive.Go(func() error {
171+
if d.Supervisor == nil {
172+
log.L.Warnf("Daemon %s is skipped for hot upgrade because recover policy is not set to 'failover'", d.ID())
182173
return nil
183174
}
184-
newDaemon, upgradeErr := fsManager.DoDaemonUpgrade(d, fs.nydusdBinaryPath, fsManager)
185-
if upgradeErr != nil {
186-
log.L.Warnf("Daemon %s hot upgrade failed, skipping: %v", d.ID(), upgradeErr)
175+
daemonInfo, err := d.GetDaemonInfo()
176+
if err != nil {
177+
log.L.Warnf("Failed to get daemon info from daemon %s, skipping: %v", d.ID(), err)
187178
return nil
188179
}
189-
fs.TryRetainSharedDaemon(newDaemon)
190-
} else {
191-
fs.TryRetainSharedDaemon(d)
192-
}
193-
return nil
194-
})
195-
}
196-
if err := egLive.Wait(); err != nil {
197-
return nil, err
180+
if newNydusImageBinaryCommit != daemonInfo.DaemonVersion().GitCommit {
181+
fsManager, err := fs.getManager(d.States.FsDriver)
182+
if err != nil {
183+
log.L.Warnf("Failed to get filesystem manager for daemon %s, skipping: %v", d.ID(), err)
184+
return nil
185+
}
186+
newDaemon, upgradeErr := fsManager.DoDaemonUpgrade(d, fs.nydusdBinaryPath, fsManager)
187+
if upgradeErr != nil {
188+
log.L.Warnf("Daemon %s hot upgrade failed, skipping: %v", d.ID(), upgradeErr)
189+
return nil
190+
}
191+
fs.TryRetainSharedDaemon(newDaemon)
192+
} else {
193+
fs.TryRetainSharedDaemon(d)
194+
}
195+
return nil
196+
})
197+
}
198+
if err := egLive.Wait(); err != nil {
199+
return nil, err
200+
}
198201
}
199202
return &fs, nil
200203
}

0 commit comments

Comments
 (0)