@@ -89,21 +89,22 @@ def with_session(options = {})
89
89
def transaction ( options = { } , session_options : { } )
90
90
with_session ( session_options ) do |session |
91
91
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 )
95
96
rescue *transactions_not_supported_exceptions
96
97
raise Mongoid ::Errors ::TransactionsNotSupported
97
98
rescue Mongoid ::Errors ::Rollback
98
- abort_transaction ( session )
99
+ run_abort_callbacks ( session )
99
100
rescue Mongoid ::Errors ::InvalidSessionNesting
100
101
# Session should be ended here.
101
102
raise Mongoid ::Errors ::InvalidTransactionNesting . new
102
103
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 )
105
106
rescue StandardError => e
106
- abort_transaction ( session )
107
+ run_abort_callbacks ( session )
107
108
raise e
108
109
end
109
110
end
@@ -189,25 +190,21 @@ def in_transaction?
189
190
_session &.in_transaction? || false
190
191
end
191
192
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.
194
194
#
195
195
# @param [ Mongo::Session ] session Session on which
196
196
# a transaction is started.
197
- def commit_transaction ( session )
198
- session . commit_transaction
197
+ def run_commit_callbacks ( session )
199
198
Threaded . clear_modified_documents ( session ) . each do |doc |
200
199
doc . run_after_callbacks ( :commit )
201
200
end
202
201
end
203
202
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.
206
204
#
207
205
# @param [ Mongo::Session ] session Session on which
208
206
# a transaction is started.
209
- def abort_transaction ( session )
210
- session . abort_transaction
207
+ def run_abort_callbacks ( session )
211
208
Threaded . clear_modified_documents ( session ) . each do |doc |
212
209
doc . run_after_callbacks ( :rollback )
213
210
end
0 commit comments