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