method
within_new_transaction
v7.2.3 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::TransactionManager
within_new_transaction(isolation: nil, joinable: true)public
No documentation available.
# File activerecord/lib/active_record/connection_adapters/abstract/transaction.rb, line 612
def within_new_transaction(isolation: nil, joinable: true)
@connection.lock.synchronize do
transaction = begin_transaction(isolation: isolation, joinable: joinable)
begin
yield transaction.user_transaction
rescue Exception => error
rollback_transaction
after_failure_actions(transaction, error)
raise
ensure
unless error
if Thread.current.status == "aborting"
rollback_transaction
else
begin
commit_transaction
rescue ActiveRecord::ConnectionFailed
transaction.invalidate! unless transaction.state.completed?
raise
rescue Exception
rollback_transaction(transaction) unless transaction.state.completed?
raise
end
end
end
end
ensure
unless transaction&.state&.completed?
@connection.throw_away!
transaction&.incomplete!
end
end
end