From 0e7e1b940ba6d6c3fc0e2e2015528829e85b430d Mon Sep 17 00:00:00 2001 From: Tran Phong <53143403+TP-O@users.noreply.github.com> Date: Mon, 17 Apr 2023 21:57:29 +0700 Subject: [PATCH] Remove redundant goroutine while removing containers (#10449) don't use goroutine to stop container while removing Signed-off-by: TP-O --- pkg/compose/down.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/pkg/compose/down.go b/pkg/compose/down.go index 55b5b068e..a9877fbb8 100644 --- a/pkg/compose/down.go +++ b/pkg/compose/down.go @@ -237,21 +237,25 @@ func (s *composeService) removeVolume(ctx context.Context, id string, w progress return err } +func (s *composeService) stopContainer(ctx context.Context, w progress.Writer, container moby.Container, timeout *time.Duration) error { + eventName := getContainerProgressName(container) + w.Event(progress.StoppingEvent(eventName)) + timeoutInSecond := utils.DurationSecondToInt(timeout) + err := s.apiClient().ContainerStop(ctx, container.ID, containerType.StopOptions{Timeout: timeoutInSecond}) + if err != nil { + w.Event(progress.ErrorMessageEvent(eventName, "Error while Stopping")) + return err + } + w.Event(progress.StoppedEvent(eventName)) + return nil +} + func (s *composeService) stopContainers(ctx context.Context, w progress.Writer, containers []moby.Container, timeout *time.Duration) error { eg, ctx := errgroup.WithContext(ctx) for _, container := range containers { container := container eg.Go(func() error { - eventName := getContainerProgressName(container) - w.Event(progress.StoppingEvent(eventName)) - timeoutInSecond := utils.DurationSecondToInt(timeout) - err := s.apiClient().ContainerStop(ctx, container.ID, containerType.StopOptions{Timeout: timeoutInSecond}) - if err != nil { - w.Event(progress.ErrorMessageEvent(eventName, "Error while Stopping")) - return err - } - w.Event(progress.StoppedEvent(eventName)) - return nil + return s.stopContainer(ctx, w, container, timeout) }) } return eg.Wait() @@ -263,10 +267,8 @@ func (s *composeService) removeContainers(ctx context.Context, w progress.Writer container := container eg.Go(func() error { eventName := getContainerProgressName(container) - w.Event(progress.StoppingEvent(eventName)) - err := s.stopContainers(ctx, w, []moby.Container{container}, timeout) + err := s.stopContainer(ctx, w, container, timeout) if err != nil { - w.Event(progress.ErrorMessageEvent(eventName, "Error while Stopping")) return err } w.Event(progress.RemovingEvent(eventName))