From 133a2eefca359c58177ca6e6fee3dd46fe52a5e7 Mon Sep 17 00:00:00 2001 From: gadgethd <111318106+gadgethd@users.noreply.github.com> Date: Sun, 2 Aug 2026 22:21:24 +0100 Subject: [PATCH] fix: reconnect worker DB on InterfaceError; rate-limit error logging --- viewshed-worker/worker.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/viewshed-worker/worker.py b/viewshed-worker/worker.py index 2173bea..151cb7f 100644 --- a/viewshed-worker/worker.py +++ b/viewshed-worker/worker.py @@ -2424,16 +2424,26 @@ def worker_loop(): except Exception: db = wait_for_db() time.sleep(random.uniform(0.25, 1.25)) - except psycopg2.OperationalError: + except (psycopg2.OperationalError, psycopg2.InterfaceError): log.warning(f'{name}: DB connection lost — reconnecting') + try: + if db is not None: + db.close() + except Exception: + pass db = wait_for_db() + time.sleep(2) except Exception as exc: - log.error(f'{name}: job error: {exc}', exc_info=True) + log.error(f'{name}: job error: {exc}') try: if db and not db.closed: db.rollback() except Exception: - db = wait_for_db() + try: + db = wait_for_db() + except RuntimeError: + log.warning(f'{name}: DB still unavailable — retrying shortly') + time.sleep(1) def resolve_node_ref(db, ref: str) -> dict: