Class: Mongo::Server::Monitor::Connection
- Inherits:
-
Object
- Object
- Mongo::Server::Monitor::Connection
- Includes:
- Loggable, Retryable, Connectable
- Defined in:
- lib/mongo/server/monitor/connection.rb
Overview
This class models the monitor connections and their behavior.
Constant Summary collapse
- ISMASTER =
The command used for determining server status.
{ :ismaster => 1 }.freeze
- ISMASTER_OP_MSG =
The command used for determining server status formatted for an OP_MSG (server versions >= 3.6).
{ :ismaster => 1, '$db' => Database::ADMIN }.freeze
- ISMASTER_MESSAGE =
The constant for the ismaster command.
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).
Protocol::Msg.new([], {}, ISMASTER_OP_MSG)
- ISMASTER_BYTES =
The raw bytes for the ismaster message.
ISMASTER_MESSAGE.serialize.to_s.freeze
- ISMASTER_OP_MSG_BYTES =
The raw bytes for the ismaster OP_MSG message (server versions >= 3.6).
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.
10.freeze
- COMPRESSION =
Key for compression algorithms in the response from the server during handshake.
'compression'.freeze
- COMPRESSION_WARNING =
Warning message that the server has no compression algorithms in common with those requested
by the client.
'The server has no compression algorithms in common with those requested. ' + 'Compression will not be used.'.freeze
Constants included from Loggable
Constants included from Connectable
Connectable::SSL, Connectable::TIMEOUT
Instance Attribute Summary collapse
-
#compressor ⇒ Object
readonly
The compressor, which is determined during the handshake.
Attributes included from Connectable
Instance Method Summary collapse
-
#connect! ⇒ true
Tell the underlying socket to establish a connection to the host.
-
#disconnect! ⇒ true
Disconnect the connection.
-
#initialize(address, options = {}) ⇒ Connection
constructor
private
Initialize a new socket connection from the client to the server.
-
#ismaster ⇒ BSON::Document
Send the preserialized ismaster call.
-
#socket_timeout ⇒ Float
(also: #timeout)
Get the socket timeout.
Methods included from Loggable
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Methods included from Connectable
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.
Connection must never be directly instantiated outside of a Monitor.
Initialize a new socket connection from the client to the server.
106 107 108 109 110 111 112 113 114 |
# File 'lib/mongo/server/monitor/connection.rb', line 106 def initialize(address, = {}) @address = address @options = .freeze @app_metadata = [:app_metadata] @ssl_options = .reject { |k, v| !k.to_s.start_with?(SSL) } @socket = nil @pid = Process.pid @compressor = nil end |
Instance Attribute Details
#compressor ⇒ Object (readonly)
The compressor, which is determined during the handshake.
119 120 121 |
# File 'lib/mongo/server/monitor/connection.rb', line 119 def compressor @compressor end |
Instance Method Details
#connect! ⇒ true
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.
149 150 151 152 153 154 155 156 |
# File 'lib/mongo/server/monitor/connection.rb', line 149 def connect! unless socket && socket.connectable? @socket = address.socket(socket_timeout, ) address.connect_socket!(socket) handshake! end true end |
#disconnect! ⇒ true
This method mutates the connection by setting the socket to nil if the closing succeeded.
Disconnect the connection.
169 170 171 172 173 174 175 |
# File 'lib/mongo/server/monitor/connection.rb', line 169 def disconnect! if socket socket.close @socket = nil end true end |
#ismaster ⇒ BSON::Document
Send the preserialized ismaster call.
129 130 131 132 133 134 135 136 |
# File 'lib/mongo/server/monitor/connection.rb', line 129 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_timeout ⇒ Float Also known as: timeout
Get the socket timeout.
187 188 189 |
# File 'lib/mongo/server/monitor/connection.rb', line 187 def socket_timeout @timeout ||= [:connect_timeout] || Server::CONNECT_TIMEOUT end |