123456789_123456789_123456789_123456789_123456789_

Class: Mongo::Operation::GetMore::OpMsg Private

Do not use. This class is for internal use only.

Overview

A MongoDB getMore operation sent as an op message.

Since:

  • 2.5.2

Constant Summary

::Mongo::Operation::Specifiable - Included

BYPASS_DOC_VALIDATION, COLLATION, COLL_NAME, CURSOR_COUNT, CURSOR_ID, DB_NAME, DELETE, DELETES, DOCUMENTS, INDEX, INDEXES, INDEX_NAME, MAX_TIME_MS, OPERATION_ID, OPTIONS, READ, READ_CONCERN, SELECTOR, TO_RETURN, UPDATE, UPDATES, USER, USER_NAME, WRITE_CONCERN

::Mongo::Operation::Executable - Included

NETWORK_ERRORS

::Mongo::Operation::SessionsSupported - Included

READ_COMMANDS, ZERO_TIMESTAMP

Instance Attribute Summary

::Mongo::Operation::Executable - Included

::Mongo::Operation::Specifiable - Included

#acknowledged_write?

Does the operation have an acknowledged write concern.

#ordered?

Whether the operation is ordered.

#spec

Instance Method Summary

CommandBuilder - Included

::Mongo::Operation::PolymorphicResult - Included

::Mongo::Operation::PolymorphicLookup - Included

::Mongo::Operation::OpMsgBase - Inherited

::Mongo::Operation::Timed - Included

#apply_relevant_timeouts_to

If a timeout is active (as defined by the current context), and it has not yet expired, add :maxTimeMS to the spec.

#with_max_time

A helper method that computes the remaining timeout (in seconds) and yields it to the associated block.

::Mongo::Operation::SessionsSupported - Included

#add_read_preference

Adds $readPreference field to the command document.

#add_write_concern!, #apply_autocommit!,
#apply_causal_consistency!

Adds causal consistency document to the selector, if one can be constructed and the selector is for a startTransaction command.

#apply_causal_consistency_if_possible

Adds causal consistency document to the selector, if one can be constructed.

#apply_cluster_time!, #apply_read_pref!, #apply_session_options, #apply_start_transaction!, #apply_txn_num!, #apply_txn_opts!, #build_message, #command, #flags, #read_command?, #suppress_read_write_concern!, #validate_read_preference!

::Mongo::Operation::Executable - Included

::Mongo::Operation::ResponseHandling - Included

#add_error_labels

Adds error labels to exceptions raised in the yielded to block, which should perform MongoDB operations and raise Mongo::Errors on failure.

#add_server_diagnostics

Yields to the block and, if the block raises an exception, adds a note to the exception with the address of the specified server.

#maybe_add_retryable_write_error_label!

A method that will add the RetryableWriteError label to an error if any of the following conditions are true:

#unpin_maybe

Unpins the session and/or the connection if the yielded to block raises errors that are required to unpin the session and the connection.

#validate_result

::Mongo::Operation::Specifiable - Included

#==

Check equality of two specifiable operations.

#apply_collation,
#array_filters

The array filters.

#bypass_document_validation

Whether or not to bypass document level validation.

#coll_name

The name of the collection to which the operation should be sent.

#collation

The collation to apply to the operation.

#command

The command.

#cursor_count

Get the cursor count from the spec.

#cursor_id

The id of the cursor created on the server.

#db_name

The name of the database to which the operation should be sent.

#delete

Get the delete document from the specification.

#deletes

Get the deletes from the specification.

#documents

The documents to in the specification.

#eql?

Alias for Specifiable#==.

#index

Get the index from the specification.

#index_id

Get the index id from the spec.

#index_name

Get the index name from the spec.

#indexes

Get the indexes from the specification.

#initialize

::Mongo::Operation::Create the new specifiable operation.

#max_time_ms

Get the max time ms value from the spec.

#namespace

The namespace, consisting of the db name and collection name.

#operation_id

Get the operation id for the operation.

#options

Get the options for executing the operation on a particular connection.

#read

The read preference for this operation.

#read_concern

Get the read concern document from the spec.

#selector

The selector from the specification for execution on a particular connection.

#session

The session to use for the operation.

#to_return

The number of documents to request from the server.

#txn_num

The transaction number for the operation.

#update

The update document from the spec.

#updates

The update documents from the spec.

#user

The user for user related operations.

#user_name

The user name from the specification.

#write_concern

The write concern to use for this operation.

Instance Method Details

#apply_get_more_timeouts_to(spec, timeout_ms) (private)

Since:

  • 2.5.2

[ GitHub ]

  
# File 'lib/mongo/operation/get_more/op_msg.rb', line 44

def apply_get_more_timeouts_to(spec, timeout_ms)
  view = context&.view
  return spec unless view

  if view.cursor_type == :tailable_await
    # If timeoutMS is set, drivers MUST apply it to the original operation.
    # Drivers MUST also apply the original timeoutMS value to each next
    # call on the resulting cursor but MUST NOT use it to derive a
    # maxTimeMS value for getMore commands. Helpers for operations that
    # create tailable awaitData cursors MUST also support the
    # maxAwaitTimeMS option. Drivers MUST error if this option is set,
    # timeoutMS is set to a non-zero value, and maxAwaitTimeMS is greater
    # than or equal to timeoutMS. If this option is set, drivers MUST use
    # it as the maxTimeMS field on getMore commands.
    max_await_time_ms = view.respond_to?(:max_await_time_ms) ? view.max_await_time_ms : nil
    spec[:maxTimeMS] = max_await_time_ms if max_await_time_ms
  end

  spec
end

#apply_relevant_timeouts_to(spec, connection) (private)

Applies the relevant CSOT timeouts for a getMore command. Considers the cursor type and timeout mode and will add (or omit) a maxTimeMS field accordingly.

Since:

  • 2.5.2

[ GitHub ]

  
# File 'lib/mongo/operation/get_more/op_msg.rb', line 37

def apply_relevant_timeouts_to(spec, connection)
  with_max_time(connection) do |max_time_sec|
    timeout_ms = max_time_sec ? (max_time_sec * 1_000).to_i : nil
    apply_get_more_timeouts_to(spec, timeout_ms)
  end
end