Skip to content

Commit 8e2b57b

Browse files
MONGOID-5707 Use convenient transactions API (#5842)
1 parent 15e2ba9 commit 8e2b57b

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

lib/mongoid/clients/sessions.rb

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,22 @@ def with_session(options = {})
8989
def transaction(options = {}, session_options: {})
9090
with_session(session_options) do |session|
9191
begin
92-
session.start_transaction(options)
93-
yield
94-
commit_transaction(session)
92+
session.with_transaction(options) do
93+
yield
94+
end
95+
run_commit_callbacks(session)
9596
rescue *transactions_not_supported_exceptions
9697
raise Mongoid::Errors::TransactionsNotSupported
9798
rescue Mongoid::Errors::Rollback
98-
abort_transaction(session)
99+
run_abort_callbacks(session)
99100
rescue Mongoid::Errors::InvalidSessionNesting
100101
# Session should be ended here.
101102
raise Mongoid::Errors::InvalidTransactionNesting.new
102103
rescue Mongo::Error::InvalidSession, Mongo::Error::InvalidTransactionOperation => e
103-
abort_transaction(session)
104-
raise Mongoid::Errors::TransactionError(e)
104+
run_abort_callbacks(session)
105+
raise Mongoid::Errors::TransactionError.new(e)
105106
rescue StandardError => e
106-
abort_transaction(session)
107+
run_abort_callbacks(session)
107108
raise e
108109
end
109110
end
@@ -189,25 +190,21 @@ def in_transaction?
189190
_session&.in_transaction? || false
190191
end
191192

192-
# Commits the active transaction on the session, and calls
193-
# after_commit callbacks on modified documents.
193+
# Runs after_commit callbacks on modified documents.
194194
#
195195
# @param [ Mongo::Session ] session Session on which
196196
# a transaction is started.
197-
def commit_transaction(session)
198-
session.commit_transaction
197+
def run_commit_callbacks(session)
199198
Threaded.clear_modified_documents(session).each do |doc|
200199
doc.run_after_callbacks(:commit)
201200
end
202201
end
203202

204-
# Aborts the active transaction on the session, and calls
205-
# after_rollback callbacks on modified documents.
203+
# Runs after_rollback callbacks on modified documents.
206204
#
207205
# @param [ Mongo::Session ] session Session on which
208206
# a transaction is started.
209-
def abort_transaction(session)
210-
session.abort_transaction
207+
def run_abort_callbacks(session)
211208
Threaded.clear_modified_documents(session).each do |doc|
212209
doc.run_after_callbacks(:rollback)
213210
end

spec/mongoid/clients/transactions_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ def capture_exception
282282
end
283283
end
284284

285-
include_examples 'it aborts the transaction', Mongoid::Errors::InvalidTransactionNesting
285+
include_examples 'it aborts the transaction', Mongoid::Errors::TransactionError
286286
end
287287
end
288288
end
@@ -591,7 +591,7 @@ def capture_exception
591591
end
592592

593593
it 'raises an error' do
594-
expect(error).to be_a(Mongoid::Errors::InvalidTransactionNesting)
594+
expect(error).to be_a(Mongoid::Errors::TransactionError)
595595
end
596596

597597
it 'does not execute any operations' do

0 commit comments

Comments
 (0)