Browse Source

Wait for deployer threads

This patch makes sure that all deployer manager threads finish before launching
new ones. By immediately launching new ones, there was a risk where after the
deployer completes, the threads would simultaneously create deployment
executions, which breaks deployments and transfers, as deployments are designed
to only contain a single execution.
Daniel Vincze 10 months ago
parent
commit
c41cf63476
1 changed files with 7 additions and 1 deletions
  1. 7 1
      coriolis/deployer_manager/rpc/server.py

+ 7 - 1
coriolis/deployer_manager/rpc/server.py

@@ -92,6 +92,7 @@ class DeployerManagerServerEndpoint:
                 self._admin_ctx, deployment_id, str(ex))
 
     def _loop(self):
+        greenthreads = []
         while True:
             try:
                 deployments = self._rpc_conductor_client.get_deployments(
@@ -99,7 +100,12 @@ class DeployerManagerServerEndpoint:
                     include_task_info=False)
                 for d in deployments:
                     if d['last_execution_status'] == PENDING_STATUS:
-                        eventlet.spawn(self._check_deployer_status, d['id'])
+                        greenthreads.append(
+                            eventlet.spawn(
+                                self._check_deployer_status, d['id']))
+
+                for gt in greenthreads:
+                    gt.wait()
             except Exception:
                 LOG.warning(
                     f"Deployer manager failed to list pending deployments. "