Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit 163f3b9

Browse files
committed
don't run "removeContainers" in parallel as we follow dependency order
Signed-off-by: Nicolas De Loof <[email protected]>
1 parent 7d0e1df commit 163f3b9

File tree

3 files changed

+14
-32
lines changed

3 files changed

+14
-32
lines changed

local/compose/create.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import (
3535
"github.com/docker/go-connections/nat"
3636
"github.com/pkg/errors"
3737
"github.com/sirupsen/logrus"
38-
"golang.org/x/sync/errgroup"
3938

4039
"github.com/docker/compose-cli/api/compose"
4140
"github.com/docker/compose-cli/api/progress"
@@ -77,15 +76,11 @@ func (s *composeService) Create(ctx context.Context, project *types.Project, opt
7776
orphans := observedState.filter(isNotService(project.ServiceNames()...))
7877
if len(orphans) > 0 {
7978
if opts.RemoveOrphans {
80-
eg, _ := errgroup.WithContext(ctx)
8179
w := progress.ContextWriter(ctx)
82-
err := s.removeContainers(ctx, w, eg, orphans)
80+
err := s.removeContainers(ctx, w, orphans)
8381
if err != nil {
8482
return err
8583
}
86-
if eg.Wait() != nil {
87-
return err
88-
}
8984
} else {
9085
logrus.Warnf("Found orphan containers (%s) for this project. If "+
9186
"you removed or renamed this service in your compose "+

local/compose/down.go

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import (
3333
)
3434

3535
func (s *composeService) Down(ctx context.Context, projectName string, options compose.DownOptions) error {
36-
eg, _ := errgroup.WithContext(ctx)
3736
w := progress.ContextWriter(ctx)
3837

3938
if options.Project == nil {
@@ -55,25 +54,21 @@ func (s *composeService) Down(ctx context.Context, projectName string, options c
5554

5655
err = InReverseDependencyOrder(ctx, options.Project, func(c context.Context, service types.ServiceConfig) error {
5756
serviceContainers, others := containers.split(isService(service.Name))
58-
err := s.removeContainers(ctx, w, eg, serviceContainers)
57+
err := s.removeContainers(ctx, w, serviceContainers)
5958
containers = others
6059
return err
6160
})
61+
if err != nil {
62+
return err
63+
}
6264

63-
if options.RemoveOrphans {
64-
err := s.removeContainers(ctx, w, eg, containers)
65+
if options.RemoveOrphans && len(containers) > 0 {
66+
err := s.removeContainers(ctx, w, containers)
6567
if err != nil {
6668
return err
6769
}
6870
}
6971

70-
if err != nil {
71-
return err
72-
}
73-
err = eg.Wait()
74-
if err != nil {
75-
return err
76-
}
7772
networks, err := s.apiClient.NetworkList(ctx, moby.NetworkListOptions{
7873
Filters: filters.NewArgs(
7974
projectFilter(projectName),
@@ -82,14 +77,15 @@ func (s *composeService) Down(ctx context.Context, projectName string, options c
8277
if err != nil {
8378
return err
8479
}
80+
81+
eg, _ := errgroup.WithContext(ctx)
8582
for _, n := range networks {
8683
networkID := n.ID
8784
networkName := n.Name
8885
eg.Go(func() error {
8986
return s.ensureNetworkDown(ctx, networkID, networkName)
9087
})
9188
}
92-
9389
return eg.Wait()
9490
}
9591

@@ -108,15 +104,14 @@ func (s *composeService) stopContainers(ctx context.Context, w progress.Writer,
108104
return nil
109105
}
110106

111-
func (s *composeService) removeContainers(ctx context.Context, w progress.Writer, eg *errgroup.Group, containers []moby.Container) error {
107+
func (s *composeService) removeContainers(ctx context.Context, w progress.Writer, containers []moby.Container) error {
108+
eg, _ := errgroup.WithContext(ctx)
112109
for _, container := range containers {
113110
toDelete := container
114111
eg.Go(func() error {
115112
eventName := "Container " + getCanonicalContainerName(toDelete)
116-
w.Event(progress.StoppingEvent(eventName))
117113
err := s.stopContainers(ctx, w, []moby.Container{container})
118114
if err != nil {
119-
w.Event(progress.ErrorMessageEvent(eventName, "Error while Stopping"))
120115
return err
121116
}
122117
w.Event(progress.RemovingEvent(eventName))

local/compose/stop.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,14 @@ package compose
1919
import (
2020
"context"
2121

22+
"github.com/compose-spec/compose-go/types"
2223
moby "github.com/docker/docker/api/types"
2324
"github.com/docker/docker/api/types/filters"
2425

2526
"github.com/docker/compose-cli/api/progress"
26-
27-
"github.com/compose-spec/compose-go/types"
28-
"golang.org/x/sync/errgroup"
2927
)
3028

31-
func (s *composeService) Stop(ctx context.Context, project *types.Project) error {
32-
eg, _ := errgroup.WithContext(ctx)
29+
func (s *composeService) Stop(ctx context.Context, project *types.Project, consumer compose.LogConsumer) error {
3330
w := progress.ContextWriter(ctx)
3431

3532
var containers Containers
@@ -41,15 +38,10 @@ func (s *composeService) Stop(ctx context.Context, project *types.Project) error
4138
return err
4239
}
4340

44-
err = InReverseDependencyOrder(ctx, project, func(c context.Context, service types.ServiceConfig) error {
41+
return InReverseDependencyOrder(ctx, project, func(c context.Context, service types.ServiceConfig) error {
4542
serviceContainers, others := containers.split(isService(service.Name))
4643
err := s.stopContainers(ctx, w, serviceContainers)
4744
containers = others
4845
return err
4946
})
50-
if err != nil {
51-
return err
52-
}
53-
54-
return eg.Wait()
5547
}

0 commit comments

Comments
 (0)