Class: Mongo::Server::Monitor::Connection

Inherits:
Object
  • Object
show all
Includes:
Loggable, Retryable, Connectable
Defined in:
lib/mongo/server/monitor/connection.rb

Overview

This class models the monitor connections and their behavior.

Since:

  • 2.0.0

Constant Summary

ISMASTER =

The command used for determining server status.

Since:

  • 2.2.0

{ :ismaster => 1 }.freeze
ISMASTER_OP_MSG =

The command used for determining server status formatted for an OP_MSG (server versions >= 3.6).

Since:

  • 2.5.0

{ :ismaster => 1, '$db' => Database::ADMIN }.freeze
ISMASTER_MESSAGE =

The constant for the ismaster command.

Since:

  • 2.2.0

Protocol::Query.new(Database::ADMIN, Database::COMMAND, ISMASTER, :limit => -1)
ISMASTER_OP_MSG_MESSAGE =

The constant for the ismaster command as an OP_MSG (server versions >= 3.6).

Since:

  • 2.5.0

Protocol::Msg.new([:none], {}, ISMASTER_OP_MSG)
ISMASTER_BYTES =

The raw bytes for the ismaster message.

Since:

  • 2.2.0

ISMASTER_MESSAGE.serialize.to_s.freeze
ISMASTER_OP_MSG_BYTES =

The raw bytes for the ismaster OP_MSG message (server versions >= 3.6).

Since:

  • 2.5.0

ISMASTER_OP_MSG_MESSAGE.serialize.to_s.freeze
CONNECT_TIMEOUT =
Deprecated.

Please use Server::CONNECT_TIMEOUT instead. Will be removed in 3.0.0

The default time in seconds to timeout a connection attempt.

Since:

  • 2.1.2

10.freeze
COMPRESSION =

Key for compression algorithms in the response from the server during handshake.

Since:

  • 2.5.0

'compression'.freeze
COMPRESSION_WARNING =

Warning message that the server has no compression algorithms in common with those requested

by the client.

Since:

  • 2.5.0

'The server has no compression algorithms in common with those requested. ' +
'Compression will not be used.'.freeze

Constants included from Loggable

Loggable::PREFIX

Constants included from Connectable

Connectable::SSL, Connectable::TIMEOUT

Instance Attribute Summary collapse

Attributes included from Connectable

#address, #options, #pid

Instance Method Summary collapse

Methods included from Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Methods included from Connectable

#connectable?, #connected?

Methods included from Retryable

#read_with_one_retry, #read_with_retry, #write_with_retry

Constructor Details

#initialize(address, options = {}) ⇒ Connection

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Note:

Connection must never be directly instantiated outside of a Monitor.

Initialize a new socket connection from the client to the server.

Examples:

Create the connection.

Connection.new(address)

Parameters:

  • address (Mongo::Address)

    The address the connection is for.

  • options (Hash) (defaults to: {})

    The connection options.

Since:

  • 2.0.0



151
152
153
154
155
156
157
158
159
# File 'lib/mongo/server/monitor/connection.rb', line 151

def initialize(address, options = {})
  @address = address
  @options = options.freeze
  @app_metadata = options[:app_metadata]
  @ssl_options = options.reject { |k, v| !k.to_s.start_with?(SSL) }
  @socket = nil
  @pid = Process.pid
  @compressor = nil
end

Instance Attribute Details

#compressorObject (readonly)

The compressor, which is determined during the handshake.

Since:

  • 2.5.0



79
80
81
# File 'lib/mongo/server/monitor/connection.rb', line 79

def compressor
  @compressor
end

Instance Method Details

#connect!true

Note:

This method mutates the connection class by setting a socket if one previously did not exist.

Tell the underlying socket to establish a connection to the host.

Examples:

Connect to the host.

connection.connect!

Returns:

  • (true)

    If the connection succeeded.

Since:

  • 2.0.0



109
110
111
112
113
114
115
116
# File 'lib/mongo/server/monitor/connection.rb', line 109

def connect!
  unless socket && socket.connectable?
    @socket = address.socket(socket_timeout, ssl_options)
    address.connect_socket!(socket)
    handshake!
  end
  true
end

#disconnect!true

Note:

This method mutates the connection by setting the socket to nil if the closing succeeded.

Disconnect the connection.

Examples:

Disconnect from the host.

connection.disconnect!

Returns:

  • (true)

    If the disconnect succeeded.

Since:

  • 2.0.0



129
130
131
132
133
134
135
# File 'lib/mongo/server/monitor/connection.rb', line 129

def disconnect!
  if socket
    socket.close
    @socket = nil
  end
  true
end

#ismasterBSON::Document

Send the preserialized ismaster call.

Examples:

Send a preserialized ismaster message.

connection.ismaster

Returns:

  • (BSON::Document)

    The ismaster result.

Since:

  • 2.2.0



89
90
91
92
93
94
95
96
# File 'lib/mongo/server/monitor/connection.rb', line 89

def ismaster
  ensure_connected do |socket|
    read_with_one_retry do
      socket.write(ISMASTER_BYTES)
      Protocol::Message.deserialize(socket).documents[0]
    end
  end
end

#socket_timeoutFloat Also known as: timeout

Get the socket timeout.

Examples:

Get the socket timeout.

connection.socket_timeout

Returns:

  • (Float)

    The socket timeout in seconds. Note that the Monitor's connection uses the connect timeout value for calling ismaster. See the Server Discovery and Monitoring specification for details.

Since:

  • 2.4.3



171
172
173
# File 'lib/mongo/server/monitor/connection.rb', line 171

def socket_timeout
  @timeout ||= options[:connect_timeout] || Server::CONNECT_TIMEOUT
end