module Mongo::Operation::Write::Bulk::Bulkable

Provides common behavior for bulk write operations. Note that validate! is not called on operation results because they are merged at a higher level.

@since 2.1.0

Public Instance Methods

execute(server) click to toggle source

Execute the bulk operation.

@example Execute the operation.

operation.execute(server)

@param [ Mongo::Server ] server The server to send this operation to.

@return [ Result ] The operation result.

@since 2.0.0

# File lib/mongo/operation/write/bulk/bulkable.rb, line 37
def execute(server)
  result = execute_write_command(server)
  server.update_cluster_time(result)
  session.process(result) if session
  result
end

Private Instance Methods

execute_message(server) click to toggle source
# File lib/mongo/operation/write/bulk/bulkable.rb, line 46
def execute_message(server)
  replies = messages.map do |m|
    server.with_connection do |connection|
      result = self.class::LegacyResult.new(connection.dispatch([ m, gle ].compact, operation_id))
      if stop_sending?(result)
        return result
      else
        result.reply
      end
    end
  end
  self.class::LegacyResult.new(replies.compact.empty? ? nil : replies)
end
gle() click to toggle source
# File lib/mongo/operation/write/bulk/bulkable.rb, line 64
def gle
  wc = write_concern ||  WriteConcern.get(WriteConcern::DEFAULT)
  gle_message = ( ordered? && wc.get_last_error.nil? ) ?
      WriteConcern.get(WriteConcern::DEFAULT).get_last_error :
      wc.get_last_error
  if gle_message
    Protocol::Query.new(
        db_name,
        Database::COMMAND,
        gle_message,
        options.merge(limit: -1)
    )
  end
end
stop_sending?(result) click to toggle source
# File lib/mongo/operation/write/bulk/bulkable.rb, line 60
def stop_sending?(result)
  ordered? && !result.successful?
end