class Mongoid::Transaction
Constants
- ISOLATIOAN_LEVELS
Tokumx supports 3 isolation levels. default is mvcc
Public Class Methods
execute(isolation_level = "mvcc") { |block| ... }
click to toggle source
# File lib/mongoid/transaction.rb, line 6 def self.execute(isolation_level = "mvcc", &block) session = Mongoid.default_session raise 'Invalid isolation level' unless ISOLATIOAN_LEVELS.include? isolation_level # If transaction is not supported excute queries by default behaviour of # mongo if transaction_supported?(session, isolation_level) begin # Transaction is started when we called transaction_supported? so yield # block here yield(block) commit_transaction(session) true rescue Exception => e rollback_transaction(session) raise e end else yield(block) end end
Private Class Methods
begin_transaction(session, isolation_level)
click to toggle source
# File lib/mongoid/transaction.rb, line 42 def self.begin_transaction(session, isolation_level) message= session.command({beginTransaction: 1, isolation: isolation_level}) end
commit_transaction(session)
click to toggle source
# File lib/mongoid/transaction.rb, line 46 def self.commit_transaction session message = session.command({commitTransaction: 1}) end
rollback_transaction(session)
click to toggle source
# File lib/mongoid/transaction.rb, line 50 def self.rollback_transaction session message = session.command({rollbackTransaction: 1}) end
transaction_supported?(session, isolation_level)
click to toggle source
# File lib/mongoid/transaction.rb, line 29 def self.transaction_supported?(session, isolation_level) begin begin_transaction(session, isolation_level) true rescue Exception => e if e.as_json['details']['errmsg'].include? 'no such cmd' false else raise e end end end