Add fail fast path when containerd fails on startup

Prevents looping of startup errors such as containerd
not being found on the path.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
This commit is contained in:
Derek McGowan 2018-09-04 12:04:35 -07:00
parent 6ba1e91877
commit ce0b0b72bc
No known key found for this signature in database
GPG key ID: F58C5D0A4405ACDB

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
@ -263,7 +266,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
}