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

Inherits:
Object
  • Object
show all
Includes:
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_MESSAGE =

The constant for the ismaster command.

Since:

  • 2.2.0

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

The raw bytes for the ismaster message.

Since:

  • 2.2.0

ISMASTER_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

Constants included from Connectable

Connectable::SSL, Connectable::TIMEOUT

Instance Attribute Summary

Attributes included from Connectable

#address, #options, #pid

Instance Method Summary collapse

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



118
119
120
121
122
123
124
125
# File 'lib/mongo/server/monitor/connection.rb', line 118

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
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



76
77
78
79
80
81
82
83
# File 'lib/mongo/server/monitor/connection.rb', line 76

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



96
97
98
99
100
101
102
# File 'lib/mongo/server/monitor/connection.rb', line 96

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



56
57
58
59
60
61
62
63
# File 'lib/mongo/server/monitor/connection.rb', line 56

def ismaster
  ensure_connected do |socket|
    read_with_one_retry do
      socket.write(ISMASTER_BYTES)
      Protocol::Reply.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



137
138
139
# File 'lib/mongo/server/monitor/connection.rb', line 137

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