1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #37759 from dmcgowan/fix-libcontainerd-startup-error

Add fail fast path when containerd fails on startup
This commit is contained in:
Sebastiaan van Stijn 2018-09-14 15:15:38 +02:00 committed by GitHub
commit 06b9588c2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -43,7 +43,7 @@ type remote struct {
logger *logrus.Entry
daemonWaitCh chan struct{}
daemonStartCh chan struct{}
daemonStartCh chan error
daemonStopCh chan struct{}
rootDir string
@ -72,7 +72,7 @@ func Start(ctx context.Context, rootDir, stateDir string, opts ...DaemonOpt) (Da
pluginConfs: pluginConfigs{make(map[string]interface{})},
daemonPid: -1,
logger: logrus.WithField("module", "libcontainerd"),
daemonStartCh: make(chan struct{}),
daemonStartCh: make(chan error, 1),
daemonStopCh: make(chan struct{}),
}
@ -92,7 +92,10 @@ func Start(ctx context.Context, rootDir, stateDir string, opts ...DaemonOpt) (Da
select {
case <-time.After(startupTimeout):
return nil, errors.New("timeout waiting for containerd to start")
case <-r.daemonStartCh:
case err := <-r.daemonStartCh:
if err != nil {
return nil, err
}
}
return r, nil
@ -269,7 +272,11 @@ func (r *remote) monitorDaemon(ctx context.Context) {
os.RemoveAll(r.GRPC.Address)
if err := r.startContainerd(); err != nil {
r.logger.WithError(err).Error("failed starting containerd")
if !started {
r.daemonStartCh <- err
return
}
r.logger.WithError(err).Error("failed restarting containerd")
delay = time.After(50 * time.Millisecond)
continue
}