diff --git a/local/compose/create.go b/local/compose/create.go index b4b251bd8..2e2eea450 100644 --- a/local/compose/create.go +++ b/local/compose/create.go @@ -35,7 +35,6 @@ import ( "github.com/docker/go-connections/nat" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "golang.org/x/sync/errgroup" "github.com/docker/compose-cli/api/compose" "github.com/docker/compose-cli/api/progress" @@ -77,15 +76,11 @@ func (s *composeService) Create(ctx context.Context, project *types.Project, opt orphans := observedState.filter(isNotService(project.ServiceNames()...)) if len(orphans) > 0 { if opts.RemoveOrphans { - eg, _ := errgroup.WithContext(ctx) w := progress.ContextWriter(ctx) - err := s.removeContainers(ctx, w, eg, orphans) + err := s.removeContainers(ctx, w, orphans) if err != nil { return err } - if eg.Wait() != nil { - return err - } } else { logrus.Warnf("Found orphan containers (%s) for this project. If "+ "you removed or renamed this service in your compose "+ diff --git a/local/compose/down.go b/local/compose/down.go index 47581dda8..4a5448864 100644 --- a/local/compose/down.go +++ b/local/compose/down.go @@ -33,7 +33,6 @@ import ( ) func (s *composeService) Down(ctx context.Context, projectName string, options compose.DownOptions) error { - eg, _ := errgroup.WithContext(ctx) w := progress.ContextWriter(ctx) if options.Project == nil { @@ -55,25 +54,21 @@ func (s *composeService) Down(ctx context.Context, projectName string, options c err = InReverseDependencyOrder(ctx, options.Project, func(c context.Context, service types.ServiceConfig) error { serviceContainers, others := containers.split(isService(service.Name)) - err := s.removeContainers(ctx, w, eg, serviceContainers) + err := s.removeContainers(ctx, w, serviceContainers) containers = others return err }) + if err != nil { + return err + } - if options.RemoveOrphans { - err := s.removeContainers(ctx, w, eg, containers) + if options.RemoveOrphans && len(containers) > 0 { + err := s.removeContainers(ctx, w, containers) if err != nil { return err } } - if err != nil { - return err - } - err = eg.Wait() - if err != nil { - return err - } networks, err := s.apiClient.NetworkList(ctx, moby.NetworkListOptions{ Filters: filters.NewArgs( projectFilter(projectName), @@ -82,6 +77,8 @@ func (s *composeService) Down(ctx context.Context, projectName string, options c if err != nil { return err } + + eg, _ := errgroup.WithContext(ctx) for _, n := range networks { networkID := n.ID networkName := n.Name @@ -89,7 +86,6 @@ func (s *composeService) Down(ctx context.Context, projectName string, options c return s.ensureNetworkDown(ctx, networkID, networkName) }) } - return eg.Wait() } @@ -108,15 +104,14 @@ func (s *composeService) stopContainers(ctx context.Context, w progress.Writer, return nil } -func (s *composeService) removeContainers(ctx context.Context, w progress.Writer, eg *errgroup.Group, containers []moby.Container) error { +func (s *composeService) removeContainers(ctx context.Context, w progress.Writer, containers []moby.Container) error { + eg, _ := errgroup.WithContext(ctx) for _, container := range containers { toDelete := container eg.Go(func() error { eventName := "Container " + getCanonicalContainerName(toDelete) - w.Event(progress.StoppingEvent(eventName)) err := s.stopContainers(ctx, w, []moby.Container{container}) if err != nil { - w.Event(progress.ErrorMessageEvent(eventName, "Error while Stopping")) return err } w.Event(progress.RemovingEvent(eventName)) diff --git a/local/compose/stop.go b/local/compose/stop.go index 9ffd69610..e06cd341f 100644 --- a/local/compose/stop.go +++ b/local/compose/stop.go @@ -19,17 +19,14 @@ package compose import ( "context" + "github.com/compose-spec/compose-go/types" moby "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/compose-cli/api/progress" - - "github.com/compose-spec/compose-go/types" - "golang.org/x/sync/errgroup" ) -func (s *composeService) Stop(ctx context.Context, project *types.Project) error { - eg, _ := errgroup.WithContext(ctx) +func (s *composeService) Stop(ctx context.Context, project *types.Project, consumer compose.LogConsumer) error { w := progress.ContextWriter(ctx) var containers Containers @@ -41,15 +38,10 @@ func (s *composeService) Stop(ctx context.Context, project *types.Project) error return err } - err = InReverseDependencyOrder(ctx, project, func(c context.Context, service types.ServiceConfig) error { + return InReverseDependencyOrder(ctx, project, func(c context.Context, service types.ServiceConfig) error { serviceContainers, others := containers.split(isService(service.Name)) err := s.stopContainers(ctx, w, serviceContainers) containers = others return err }) - if err != nil { - return err - } - - return eg.Wait() }