Class: ActiveRecord::DeadlockRetry
- Inherits:
-
Object
- Object
- ActiveRecord::DeadlockRetry
- Defined in:
- lib/activerecord/deadlock_retry.rb
Constant Summary collapse
- LOG_DIR =
'log'
Class Method Summary collapse
Class Method Details
.logger ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'lib/activerecord/deadlock_retry.rb', line 22 def self.logger return @logger if @logger if defined?(Rails) @logger = Rails.logger else Dir.mkdir(LOG_DIR) unless Dir.exist?(LOG_DIR) @logger = Logger.new(File.join(LOG_DIR, 'deadlock_retry.log')) end end |
.logger=(logger) ⇒ Object
32 33 34 |
# File 'lib/activerecord/deadlock_retry.rb', line 32 def self.logger=(logger) @logger = logger end |
.transaction(opts = {}, &block) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/activerecord/deadlock_retry.rb', line 5 def self.transaction(opts={}, &block) klass = opts[:class] || ActiveRecord::Base method = opts[:method] || :transaction retries = opts[:retries] || 5 begin klass.send(method, &block) rescue ActiveRecord::StatementInvalid => e if e. =~ /Deadlock found when trying to get lock/ && retries > 0 retries -= 1 logger.info("ActiveRecord::DeadlockRetry: retrying transaction after deadlock (#{retries} retries left)") sleep 5 retry end raise end end |