module CollectiveIdea::Acts::NestedSet::Model::Transactable
Protected Instance Methods
in_tenacious_transaction(&block)
click to toggle source
# File lib/awesome_nested_set/model/transactable.rb, line 13 def in_tenacious_transaction(&block) retry_count = 0 begin transaction(&block) rescue CollectiveIdea::Acts::NestedSet::Move::ImpossibleMove raise rescue ActiveRecord::StatementInvalid => error raise OpenTransactionsIsNotZero.new(error.message) unless connection.open_transactions.zero? raise unless error.message =~ /[Dd]eadlock|Lock wait timeout exceeded/ raise DeadlockDetected.new(error.message) unless retry_count < 10 retry_count += 1 logger.info "Deadlock detected on retry #{retry_count}, restarting transaction" sleep(rand(retry_count)*0.1) # Aloha protocol retry end end