module Mongo::Operation::Executable

Shared executable behavior of operations.

@since 2.5.2

Public Instance Methods

do_execute(server) click to toggle source
# File lib/mongo/operation/shared/executable.rb, line 25
def do_execute(server)
  unpin_maybe(session) do
    add_error_labels do
      add_server_diagnostics(server) do
        get_result(server).tap do |result|
          process_result(result, server)
        end
      end
    end
  end
end
execute(server) click to toggle source
# File lib/mongo/operation/shared/executable.rb, line 37
def execute(server)
  do_execute(server).tap do |result|
    validate_result(result, server)
  end
end

Private Instance Methods

build_message(server) click to toggle source
# File lib/mongo/operation/shared/executable.rb, line 60
def build_message(server)
  message(server)
end
dispatch_message(server) click to toggle source

Returns a Protocol::Message or nil

# File lib/mongo/operation/shared/executable.rb, line 54
def dispatch_message(server)
  server.with_connection do |connection|
    connection.dispatch([ build_message(server) ], operation_id)
  end
end
get_result(server) click to toggle source
# File lib/mongo/operation/shared/executable.rb, line 49
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 64
def process_result(result, server)
  server.update_cluster_time(result)

  if result.not_master? || result.node_recovering?
    if result.node_shutting_down?
      keep_pool = false
    else
      # Max wire version needs to be examined while the server is known
      keep_pool = server.description.server_version_gte?('4.2')
    end

    server.unknown!(keep_connection_pool: keep_pool)

    server.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 45
def result_class
  Result
end