Browse Source

Remove redundant goroutine while removing containers (#10449)

don't use goroutine to stop container while removing

Signed-off-by: TP-O <[email protected]>
Tran Phong 2 years ago
parent
commit
0e7e1b940b
1 changed files with 15 additions and 13 deletions
  1. 15 13
      pkg/compose/down.go

+ 15 - 13
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))