From 4e60c77e96464ed2661497149976c0855752a517 Mon Sep 17 00:00:00 2001 From: Daniel Vincze Date: Wed, 19 Nov 2025 18:06:57 +0200 Subject: [PATCH] Fix Deployer Manager RPC connection leak The deployer manager service created new rpc connections on every deployment check, basically causing an RPC connection leak which also caused task hanging. This fixes the connection leak from within the deployer service. --- coriolis/constants.py | 2 +- coriolis/deployer_manager/rpc/server.py | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/coriolis/constants.py b/coriolis/constants.py index 7549b3a4..71e55343 100644 --- a/coriolis/constants.py +++ b/coriolis/constants.py @@ -293,7 +293,7 @@ EXECUTION_TYPE_TO_ACTION_LOCK_NAME_FORMAT_MAP = { EXECUTION_TYPE_TRANSFER_EXECUTION: TRANSFER_LOCK_NAME_FORMAT, - EXECUTION_TYPE_DEPLOYMENT: TRANSFER_LOCK_NAME_FORMAT, + EXECUTION_TYPE_DEPLOYMENT: DEPLOYMENT_LOCK_NAME_FORMAT, EXECUTION_TYPE_TRANSFER_UPDATE: TRANSFER_LOCK_NAME_FORMAT, EXECUTION_TYPE_TRANSFER_DISKS_DELETE: TRANSFER_LOCK_NAME_FORMAT, EXECUTION_TYPE_MINION_POOL_MAINTENANCE: MINION_POOL_LOCK_NAME_FORMAT, diff --git a/coriolis/deployer_manager/rpc/server.py b/coriolis/deployer_manager/rpc/server.py index 1efb1cc1..304403ed 100644 --- a/coriolis/deployer_manager/rpc/server.py +++ b/coriolis/deployer_manager/rpc/server.py @@ -54,7 +54,7 @@ def _wait_for_pending_deployment_status_change(self, deployment_id): LOG.info( f"Deployment '{deployment_id}' is still '{deployment_status}'") i += 1 - time.sleep(5) + time.sleep(1) raise exception.InvalidDeploymentState( f"Timed out waiting for deployment '{deployment_id}' to be out of " @@ -120,7 +120,6 @@ def _check_deployer_status(self, deployment_id): self._admin_ctx, deployment_id, str(ex)) def _loop(self): - greenthreads = [] while True: try: deployments = self._rpc_conductor_client.get_deployments( @@ -128,12 +127,7 @@ def _loop(self): include_task_info=False) for d in deployments: if d['last_execution_status'] == PENDING_STATUS: - greenthreads.append( - eventlet.spawn( - self._check_deployer_status, d['id'])) - - for gt in greenthreads: - gt.wait() + self._check_deployer_status(d['id']) except Exception: LOG.warning( f"Deployer manager failed to list pending deployments. "