module Mongo::Operation::Executable

Shared executable behavior of operations.

@since 2.5.2

Public Instance Methods

execute(server) click to toggle source
# File lib/mongo/operation/shared/executable.rb, line 23
def execute(server)
  result = get_result(server)
  process_result(result, server)
  result.validate!
end

Private Instance Methods

dispatch_message(server) click to toggle source

Returns a Protocol::Message or nil

# File lib/mongo/operation/shared/executable.rb, line 40
def dispatch_message(server)
  server.with_connection do |connection|
    connection.dispatch([ message(server) ], operation_id)
  end
end
get_result(server) click to toggle source
# File lib/mongo/operation/shared/executable.rb, line 35
def get_result(server)
  result_class.new(dispatch_message(server))
end
process_result(result, server) click to toggle source
# File lib/mongo/operation/shared/executable.rb, line 46
def process_result(result, server)
  server.update_cluster_time(result)

  if result.not_master? || result.node_recovering?
    if result.node_shutting_down?
      disconnect_pool = true
    else
      # Max wire version needs to be checked prior to marking the
      # server unknown
      disconnect_pool = server.description.max_wire_version < 8
    end

    server.unknown!

    if disconnect_pool
      server.pool.disconnect!
    end

    server.monitor.scan_semaphore.signal
  end

  session.process(result) if session
  result
end
result_class() click to toggle source
# File lib/mongo/operation/shared/executable.rb, line 31
def result_class
  Result
end