X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/bf29550db840c97cafffbe1e836750bef6c7942d..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