fix: keep provisioning loop alive

This commit is contained in:
Brad Stein 2026-01-22 18:26:48 -03:00
parent fbe516bac7
commit f7eca83ff0

View File

@ -106,7 +106,13 @@ class ProvisioningManager:
continue
candidates = self._storage.list_provision_candidates()
for request in candidates:
self.provision_access_request(request.request_code)
try:
self.provision_access_request(request.request_code)
except Exception:
logger.exception(
"provisioning loop error",
extra={"event": "provision_loop_error", "request_code": request.request_code},
)
time.sleep(settings.provision_poll_interval_sec)
def _sync_status_metrics(self) -> None:
@ -168,6 +174,7 @@ class ProvisioningManager:
self._log_provision_start(request_code)
with self._db.connection() as conn:
conn.autocommit = True
lock_id = _advisory_lock_id(request_code)
locked_row = conn.execute("SELECT pg_try_advisory_lock(%s) AS locked", (lock_id,)).fetchone()
if not locked_row or not locked_row.get("locked"):
@ -175,7 +182,13 @@ class ProvisioningManager:
try:
return self._provision_locked(conn, request_code, required_tasks)
finally:
conn.execute("SELECT pg_advisory_unlock(%s)", (lock_id,))
try:
conn.execute("SELECT pg_advisory_unlock(%s)", (lock_id,))
except Exception:
logger.warning(
"failed to release advisory lock",
extra={"event": "provision_unlock_error", "request_code": request_code},
)
def _provision_locked(
self,