Browse Source

Properly relay errors in execute_convergence_plan

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 8 years ago
parent
commit
1646e75591
1 changed files with 14 additions and 5 deletions
  1. 14 5
      compose/service.py

+ 14 - 5
compose/service.py

@@ -378,12 +378,16 @@ class Service(object):
                     self.start_container(container)
                 return container
 
-            return parallel_execute(
+            containers, errors = parallel_execute(
                 range(i, i + scale),
                 lambda n: create_and_start(self, n),
                 lambda n: self.get_container_name(n),
                 "Creating"
-            )[0]
+            )
+            if errors:
+                raise OperationFailedError(errors.values()[0])
+
+            return containers
 
     def _execute_convergence_recreate(self, containers, scale, timeout, detached, start):
             if len(containers) > scale:
@@ -395,12 +399,14 @@ class Service(object):
                     container, timeout=timeout, attach_logs=not detached,
                     start_new_container=start
                 )
-            containers = parallel_execute(
+            containers, errors = parallel_execute(
                 containers,
                 recreate,
                 lambda c: c.name,
                 "Recreating"
-            )[0]
+            )
+            if errors:
+                raise OperationFailedError(errors.values()[0])
             if len(containers) < scale:
                 containers.extend(self._execute_convergence_create(
                     scale - len(containers), detached, start
@@ -412,13 +418,16 @@ class Service(object):
                 self._downscale(containers[scale:], timeout)
                 containers = containers[:scale]
             if start:
-                parallel_execute(
+                _, errors = parallel_execute(
                     containers,
                     lambda c: self.start_container_if_stopped(c, attach_logs=not detached),
                     lambda c: c.name,
                     "Starting"
                 )
 
+                if errors:
+                    raise OperationFailedError(errors.values()[0])
+
             if len(containers) < scale:
                 containers.extend(self._execute_convergence_create(
                     scale - len(containers), detached, start