From 97d2021a001262bd292eef1784001cd7bcd03da5 Mon Sep 17 00:00:00 2001 From: giles Date: Wed, 25 Feb 2026 13:40:05 +0000 Subject: [PATCH] Rollback session when advisory lock not acquired Prevents PgBouncer connection pool from inheriting dirty transaction state when the non-syncing worker returns. Co-Authored-By: Claude Opus 4.6 --- blog/bp/blog/routes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/blog/bp/blog/routes.py b/blog/bp/blog/routes.py index 570363e..8cbc865 100644 --- a/blog/bp/blog/routes.py +++ b/blog/bp/blog/routes.py @@ -55,7 +55,8 @@ def register(url_prefix, title): async with get_session() as s: got_lock = await s.scalar(text("SELECT pg_try_advisory_lock(900001)")) if not got_lock: - return # another worker is syncing + await s.rollback() # clean up before returning connection to pool + return try: await sync_all_content_from_ghost(s) await s.commit()