From 32444429fd73f32ef43b4f8176f9c3a96bd9a5d9 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Thu, 5 Feb 2026 22:41:13 -0800 Subject: [PATCH] Fix replica conflict errors and optimize screenshot worker DB calls (#4651) --- skyvern/forge/sdk/db/base_alchemy_db.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/skyvern/forge/sdk/db/base_alchemy_db.py b/skyvern/forge/sdk/db/base_alchemy_db.py index 5153e8d9..91cbb617 100644 --- a/skyvern/forge/sdk/db/base_alchemy_db.py +++ b/skyvern/forge/sdk/db/base_alchemy_db.py @@ -96,4 +96,17 @@ class _SessionFactory: yield session finally: self._session_ctx.reset(token) - await session.close() + try: + await session.close() + except SQLAlchemyError as e: + # Handle transient errors during session cleanup gracefully. + # This can happen on replicas when the connection is terminated due to + # WAL replay conflicts. Since the actual DB operation already completed + # successfully (we're in finally block cleanup), we just log and continue. + if self._db.is_retryable_error(e): + LOG.warning( + "Transient error during session close (suppressed)", + error=str(e), + ) + else: + raise