compose/pkg
Milas Bowman 407a0d5b53
up: fix various race/deadlock conditions on exit (#10934)
If running `up` in foreground mode (i.e. not `-d`),
when exiting via `Ctrl-C`, Compose stops all the
services it launched directly as part of that `up`
command.

In one of the E2E tests (`TestUpDependenciesNotStopped`),
this was occasionally flaking because the stop
behavior was racy: the return might not block on
the stop operation because it gets added to the
error group in a goroutine. As a result, it was
possible for no services to get terminated on exit.

There were a few other related pieces here that
I uncovered and tried to fix while stressing this.
For example, the printer could cause a deadlock if
an event was sent to it after it stopped.

Also, an error group wasn't really appropriate here;
each goroutine is a different operation for printing,
signal-handling, etc. If one part fails, we don't
actually want printing to stop, for example. This has
been switched to a `multierror.Group`, which has the
same API but coalesces errors instead of canceling a
context the moment the first one fails and returning
that single error.

Signed-off-by: Milas Bowman <milas.bowman@docker.com>
2023-08-31 10:47:14 -04:00
..
api pkg/api: replace uuid for basic random id 2023-08-31 10:13:32 +02:00
compose up: fix various race/deadlock conditions on exit (#10934) 2023-08-31 10:47:14 -04:00
e2e up: fix various race/deadlock conditions on exit (#10934) 2023-08-31 10:47:14 -04:00
mocks Add `docker compose wait` 2023-06-30 16:07:03 +02:00
progress progress: minor correctness fixes (#10871) 2023-08-03 15:14:17 -04:00
prompt use a simpler prompt implementation when we lack a terminal 2023-01-09 10:28:16 +01:00
remote watch: only allow a single instance per-project 2023-08-25 15:49:28 +02:00
utils logs: fix for missing output on container exit (#10925) 2023-08-23 08:57:18 -04:00
watch replace dockerfile/dockerignore with patternmatcher/ignorefile 2023-08-23 00:43:17 +02:00