From 56f169eedeb4f6a3b8d759bf7f735789322c8bc1 Mon Sep 17 00:00:00 2001 From: Vlad <4941176+crn4@users.noreply.github.com> Date: Mon, 10 Nov 2025 23:43:08 +0100 Subject: [PATCH] [management] fix pg db deadlock after app panic (#4772) --- management/server/store/sql_store.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/management/server/store/sql_store.go b/management/server/store/sql_store.go index 75f2c3ae7..94b7fc1cc 100644 --- a/management/server/store/sql_store.go +++ b/management/server/store/sql_store.go @@ -2914,6 +2914,23 @@ func (s *SqlStore) ExecuteInTransaction(ctx context.Context, operation func(stor if tx.Error != nil { return tx.Error } + defer func() { + if r := recover(); r != nil { + tx.Rollback() + panic(r) + } + }() + + if s.storeEngine == types.PostgresStoreEngine { + if err := tx.Exec("SET LOCAL statement_timeout = '1min'").Error; err != nil { + tx.Rollback() + return fmt.Errorf("failed to set statement timeout: %w", err) + } + if err := tx.Exec("SET LOCAL lock_timeout = '1min'").Error; err != nil { + tx.Rollback() + return fmt.Errorf("failed to set lock timeout: %w", err) + } + } // For MySQL, disable FK checks within this transaction to avoid deadlocks // This is session-scoped and doesn't require SUPER privileges