Connection — Documentation by YARD 0.9.37 (original) (raw)

Class: Mongo::Server::Connection

Overview

This class models the socket connections for servers and their behavior.

Constant Summarycollapse

PING =

Deprecated.

No longer necessary with Server Selection specification.

The ping command.

{ :ping => 1 }.freeze

PING_OP_MSG =

Deprecated.

No longer necessary with Server Selection specification.

The ping command for an OP_MSG (server versions >= 3.6).

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

PING_MESSAGE =

Deprecated.

No longer necessary with Server Selection specification.

Ping message.

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

PING_OP_MSG_MESSAGE =

Deprecated.

No longer necessary with Server Selection specification.

Ping message as an OP_MSG (server versions >= 3.6).

Protocol::Msg.new([], {}, PING_OP_MSG)

PING_BYTES =

Deprecated.

No longer necessary with Server Selection specification.

The ping message as raw bytes.

PING_MESSAGE.serialize.to_s.freeze

PING_OP_MSG_BYTES =

Deprecated.

No longer necessary with Server Selection specification.

The ping OP_MSG message as raw bytes (server versions >= 3.6).

PING_OP_MSG_MESSAGE.serialize.to_s.freeze

Constants included from Loggable

Loggable::PREFIX

Constants inherited from ConnectionBase

Mongo::Server::ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE, Mongo::Server::ConnectionBase::MAX_BSON_COMMAND_OVERHEAD, Mongo::Server::ConnectionBase::REDUCED_MAX_BSON_SIZE

Instance Attribute Summary collapse

Attributes included from Monitoring::Publishable

#monitoring

Attributes inherited from ConnectionBase

#description, #options, #server

Attributes inherited from ConnectionCommon

#compressor, #pid

Instance Method Summarycollapse

Methods included from Id

included

Methods included from Retryable

#read_worker, #select_server, #write_worker

Methods included from Monitoring::Publishable

#publish_cmap_event, #publish_event, #publish_sdam_event

Methods included from Loggable

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

Methods inherited from ConnectionBase

#app_metadata, #dispatch, #generation, #service_id

Methods inherited from ConnectionCommon

#handshake_command, #handshake_document

Constructor Details

#initialize(server, 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 Server.

Creates a new connection object to the specified target address with the specified options.

The constructor does not perform any I/O (and thus does not create sockets, handshakes nor authenticates); call connect! method on the connection object to create the network connection.

106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 # File 'lib/mongo/server/connection.rb', line 106 def initialize(server, options = {}) if server.load_balancer? && options[:generation] raise ArgumentError, "Generation cannot be set when server is a load balancer" end @id = server.next_connection_id @global_id = self.class.next_id @monitoring = server.monitoring @options = options.freeze @server = server @socket = nil @last_checkin = nil @auth_mechanism = nil @pid = Process.pid @pinned = false publish_cmap_event( Monitoring::Event::Cmap::ConnectionCreated.new(address, id) ) end

Instance Attribute Details

#global_id ⇒ Integer

140 141 142 # File 'lib/mongo/server/connection.rb', line 140 def global_id @global_id end

#id ⇒ Integer

across connections to the same server object.

136 137 138 # File 'lib/mongo/server/connection.rb', line 136 def id @id end

#last_checkin ⇒ Time

Returns The last time the connection was checked back into a pool.

130 131 132 # File 'lib/mongo/server/connection.rb', line 130 def last_checkin @last_checkin end

Instance Method Details

#closed? ⇒ true | false

Whether the connection was closed.

Closed connections should no longer be used. Instead obtain a new connection from the connection pool.

166 167 168 # File 'lib/mongo/server/connection.rb', line 166 def closed? !!@closed end

#connect!(context = nil) ⇒ true

Note:

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

Establishes a network connection to the target address.

If the connection is already established, this method does nothing.

229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 # File 'lib/mongo/server/connection.rb', line 229 def connect!(context = nil) raise_if_closed! unless @socket @socket = create_socket(context) @description, @compressor = do_connect if server.load_balancer? if Lint.enabled? unless service_id raise Error::InternalDriverError, "The connection is to a load balancer and it must have service_id set here, but does not" end end @generation = connection_pool.generation_manager.generation(service_id: service_id) end publish_cmap_event( Monitoring::Event::Cmap::ConnectionReady.new(address, id) ) @close_event_published = false end true end

#connected? ⇒ true | false

Whether the connection was connected and was not interrupted, closed, or had an error raised.

154 155 156 # File 'lib/mongo/server/connection.rb', line 154 def connected? !closed? && !error? && !interrupted? && !!@socket end

#connection_pool ⇒ Object

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.

The connection pool from which this connection was created. May be nil.

146 147 148 # File 'lib/mongo/server/connection.rb', line 146 def connection_pool options[:connection_pool] end

#disconnect!(options = nil) ⇒ true

Note:

Once a connection is disconnected, it should no longer be used. A new connection should be obtained from the connection pool which will either return a ready connection or create a new connection. If linting is enabled, reusing a disconnected connection will raise Error::LintError. If linting is not enabled, a warning will be logged.

Note:

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

Disconnect the connection.

311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 # File 'lib/mongo/server/connection.rb', line 311 def disconnect!(options = nil) @auth_mechanism = nil @last_checkin = nil if socket socket.close rescue nil @socket = nil end @closed = true interrupted! if options && options[:interrupted] unless @close_event_published reason = options && options[:reason] publish_cmap_event( Monitoring::Event::Cmap::ConnectionClosed.new( address, id, reason, ), ) @close_event_published = true end true end

#error? ⇒ Boolean

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.

186 187 188 # File 'lib/mongo/server/connection.rb', line 186 def error? !!@error end

#interrupted! ⇒ Object

Mark the connection as interrupted.

181 182 183 # File 'lib/mongo/server/connection.rb', line 181 def interrupted! @interrupted = true end

#interrupted? ⇒ true | false

Whether the connection was interrupted.

Interrupted connections were already removed from the pool and should not be checked back into the pool.

176 177 178 # File 'lib/mongo/server/connection.rb', line 176 def interrupted? !!@interrupted end

#pin ⇒ Object

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.

Mark the connection as pinned.

205 206 207 # File 'lib/mongo/server/connection.rb', line 205 def pin @pinned = true end

#ping ⇒ true, false

Deprecated.

No longer necessary with Server Selection specification.

Note:

This uses a pre-serialized ping message for optimization.

Ping the connection to see if the server is responding to commands. This is non-blocking on the server side.

| 356 357 358 359 360 361 362 363 364 365 | # File 'lib/mongo/server/connection.rb', line 356 def ping bytes = features.op_msg_enabled? ? PING_OP_MSG_BYTES : PING_BYTES ensure_connected do |socket| reply = add_server_diagnostics do socket.write(bytes) Protocol::Message.deserialize(socket, max_message_size) end reply.documents[0][Operation::Result::OK] == 1 end end | | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

#pinned? ⇒ Boolean

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.

Whether the connection is used by a transaction or cursor operations.

Pinned connections should not be disconnected and removed from a connection pool if they are idle or stale.

# @return [ true | false ] Whether connection is pinned.

198 199 200 # File 'lib/mongo/server/connection.rb', line 198 def pinned? @pinned end

#record_checkin! ⇒ self

Record the last checkin time.

386 387 388 389 # File 'lib/mongo/server/connection.rb', line 386 def record_checkin! @last_checkin = Time.now self end

#socket_timeout ⇒ Float Also known as:timeout

Get the timeout to execute an operation on a socket.

| 372 373 374 | # File 'lib/mongo/server/connection.rb', line 372 def socket_timeout @timeout ||= options[:socket_timeout] end | | ----------- | ---------------------------------------------------------------------------------------------------------------------- |

#unpin ⇒ Object

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.

Mark the connection as not pinned.

212 213 214 # File 'lib/mongo/server/connection.rb', line 212 def unpin @pinned = false end