X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/bed9cd00ed166ce346da4b8a9b654ddf86e64e70..9db956c3c677e6993c95bb842a9690332c5a5672:/vendor/plugins/deadlock_retry/lib/deadlock_retry.rb diff --git a/vendor/plugins/deadlock_retry/lib/deadlock_retry.rb b/vendor/plugins/deadlock_retry/lib/deadlock_retry.rb index 413cb823c..f287c4e67 100644 --- a/vendor/plugins/deadlock_retry/lib/deadlock_retry.rb +++ b/vendor/plugins/deadlock_retry/lib/deadlock_retry.rb @@ -33,7 +33,8 @@ module DeadlockRetry module ClassMethods DEADLOCK_ERROR_MESSAGES = [ "Deadlock found when trying to get lock", - "Lock wait timeout exceeded" + "Lock wait timeout exceeded", + "deadlock detected" ] MAXIMUM_RETRIES_ON_DEADLOCK = 3 @@ -44,6 +45,7 @@ module DeadlockRetry begin transaction_without_deadlock_handling(*objects, &block) rescue ActiveRecord::StatementInvalid => error + raise unless connection.open_transactions.zero? if DEADLOCK_ERROR_MESSAGES.any? { |msg| error.message =~ /#{Regexp.escape(msg)}/ } raise if retry_count >= MAXIMUM_RETRIES_ON_DEADLOCK retry_count += 1