fix: Improve coder server shutdown procedure (#3246)

* fix: Improve `coder server` shutdown procedure

This commit improves the `coder server` shutdown procedure so that all
triggers for shutdown do so in a graceful way without skipping any
steps.

We also improve cancellation and shutdown of services by ensuring
resources are cleaned up at the end.

Notable changes:
- We wrap `cmd.Context()` to allow us to control cancellation better
- We attempt graceful shutdown of the http server (`server.Shutdown`)
  because it's less abrupt (compared to `shutdownConns`)
- All exit paths share the same shutdown procedure (except for early
  exit)
- `provisionerd`s are now shutdown concurrently instead of one at a
  time, the also now get a new context for shutdown because
  `cmd.Context()` may be cancelled
- Resources created by `newProvisionerDaemon` are cleaned up
- Lifecycle `Executor` exits its goroutine on context cancellation

Fixes #3245
This commit is contained in:
Mathias Fredriksson
2022-07-27 18:21:21 +03:00
committed by GitHub
parent bb05b1f749
commit d27076cac7
5 changed files with 260 additions and 128 deletions
+1 -1
View File
@@ -108,7 +108,7 @@ allowed_ip=%s/128`,
return nil, nil, xerrors.Errorf("wireguard device listen: %w", err)
}
ch := make(chan error)
ch := make(chan error, 1)
go func() {
select {
case <-ctx.Done():