Skip to content

Commit 89741f6

Browse files
committed
If retry_deadlock_victim flag is false, call the original transaction method, otherwise, call our version of the transcation method with deadlock_victim retry logic.
1 parent f06beaa commit 89741f6

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ def supports_statement_cache?
4545
true
4646
end
4747

48-
def transaction(options = {})
48+
def transaction(options = {}, &block)
49+
retry_deadlock_victim? ? transaction_with_retry_deadlock_victim(options, &block) : super(options, &block)
50+
end
51+
52+
def transaction_with_retry_deadlock_victim(options = {})
4953
options.assert_valid_keys :requires_new, :joinable
5054

5155
last_transaction_joinable = defined?(@transaction_joinable) ? @transaction_joinable : nil
@@ -82,7 +86,7 @@ def transaction(options = {})
8286
if translate_exception(database_transaction_rollback, database_transaction_rollback.message).is_a?(DeadlockVictim)
8387
# SQL Server has already rolled back, so rollback activerecord's history
8488
rollback_transaction_records(true)
85-
retry if retry_deadlock_victim?
89+
retry
8690
else
8791
rollback_db_transaction
8892
rollback_transaction_records(true)

0 commit comments

Comments
 (0)