fix: keep provisioning loop alive
This commit is contained in:
parent
fbe516bac7
commit
f7eca83ff0
@ -106,7 +106,13 @@ class ProvisioningManager:
|
|||||||
continue
|
continue
|
||||||
candidates = self._storage.list_provision_candidates()
|
candidates = self._storage.list_provision_candidates()
|
||||||
for request in candidates:
|
for request in candidates:
|
||||||
|
try:
|
||||||
self.provision_access_request(request.request_code)
|
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)
|
time.sleep(settings.provision_poll_interval_sec)
|
||||||
|
|
||||||
def _sync_status_metrics(self) -> None:
|
def _sync_status_metrics(self) -> None:
|
||||||
@ -168,6 +174,7 @@ class ProvisioningManager:
|
|||||||
self._log_provision_start(request_code)
|
self._log_provision_start(request_code)
|
||||||
|
|
||||||
with self._db.connection() as conn:
|
with self._db.connection() as conn:
|
||||||
|
conn.autocommit = True
|
||||||
lock_id = _advisory_lock_id(request_code)
|
lock_id = _advisory_lock_id(request_code)
|
||||||
locked_row = conn.execute("SELECT pg_try_advisory_lock(%s) AS locked", (lock_id,)).fetchone()
|
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"):
|
if not locked_row or not locked_row.get("locked"):
|
||||||
@ -175,7 +182,13 @@ class ProvisioningManager:
|
|||||||
try:
|
try:
|
||||||
return self._provision_locked(conn, request_code, required_tasks)
|
return self._provision_locked(conn, request_code, required_tasks)
|
||||||
finally:
|
finally:
|
||||||
|
try:
|
||||||
conn.execute("SELECT pg_advisory_unlock(%s)", (lock_id,))
|
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(
|
def _provision_locked(
|
||||||
self,
|
self,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user