module Mongo::Operation::UsesCommandOpMsg
A command that uses OP_MSG, with the document as payload type 0.
@since 2.5.0
Constants
- READ_PREFERENCE
- ZERO_TIMESTAMP
Private Instance Methods
apply_causal_consistency!(selector, server)
click to toggle source
# File lib/mongo/operation/uses_command_op_msg.rb, line 29 def apply_causal_consistency!(selector, server); end
apply_cluster_time!(selector, server)
click to toggle source
# File lib/mongo/operation/uses_command_op_msg.rb, line 31 def apply_cluster_time!(selector, server) if !server.standalone? cluster_time = [ server.cluster_time, (session && session.cluster_time) ].max_by do |doc| (doc && doc[Cluster::CLUSTER_TIME]) || ZERO_TIMESTAMP end if cluster_time && (cluster_time[Cluster::CLUSTER_TIME] > ZERO_TIMESTAMP) selector[CLUSTER_TIME] = cluster_time end end end
apply_session_id!(selector)
click to toggle source
# File lib/mongo/operation/uses_command_op_msg.rb, line 43 def apply_session_id!(selector) session.add_id!(selector) if session && !unacknowledged_write? end
command_op_msg(server, selector, options)
click to toggle source
# File lib/mongo/operation/uses_command_op_msg.rb, line 69 def command_op_msg(server, selector, options) update_selector_for_session!(selector, server) selector[Protocol::Msg::DATABASE_IDENTIFIER] = db_name selector[READ_PREFERENCE] = read.to_doc if read flags = unacknowledged_write? ? [:more_to_come] : [:none] Protocol::Msg.new(flags, options, selector) end
unacknowledged_write?()
click to toggle source
# File lib/mongo/operation/uses_command_op_msg.rb, line 47 def unacknowledged_write? write_concern && write_concern.get_last_error.nil? end
update_selector_for_session!(selector, server)
click to toggle source
# File lib/mongo/operation/uses_command_op_msg.rb, line 51 def update_selector_for_session!(selector, server) # the driver MUST ignore any implicit session if at the point it is sending a command # to a specific server it turns out that that particular server doesn't support sessions after all if server.features.sessions_enabled? apply_cluster_time!(selector, server) selector[:txnNumber] = BSON::Int64.new(txn_num) if txn_num if session apply_session_id!(selector) apply_causal_consistency!(selector, server) end elsif session && !session.implicit? apply_cluster_time!(selector, server) apply_session_id!(selector) apply_causal_consistency!(selector, server) selector[:txnNumber] = BSON::Int64.new(txn_num) if txn_num end end