Просмотр исходного кода

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 месяцев назад
Родитель
Сommit
c41cf63476
1 измененных файлов с 7 добавлено и 1 удалено
  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. "