Class: Mongo::Server::ConnectionCommon

Inherits:
Object
  • Object
show all
Defined in:
lib/mongo/server/connection_common.rb

Overview

Note:

Although methods of this module are part of the public API, the fact that these methods are defined on this module and not on the classes which include this module is not part of the public API.

Common methods used by both monitoring and non-monitoring connections.

Since:

  • 2.0.0

Direct Known Subclasses

ConnectionBase, Monitor::Connection

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#compressorString | nil (readonly)

The compressor negotiated during the handshake for this connection, if any.

This attribute is nil for connections that haven’t completed the handshake yet, and for connections that negotiated no compression.

Returns:

  • (String | nil)

    The compressor.

Since:

  • 2.0.0



34
35
36
# File 'lib/mongo/server/connection_common.rb', line 34

def compressor
  @compressor
end

#pidInteger (readonly)

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.

Returns pid The process id when the connection was created.

Returns:

  • (Integer)

    pid The process id when the connection was created.

Since:

  • 2.0.0



50
51
52
# File 'lib/mongo/server/connection_common.rb', line 50

def pid
  @pid
end

Instance Method Details

#connected?true, false

Deprecated.

Determine if the connection is currently connected.

Examples:

Is the connection connected?

connection.connected?

Returns:

  • (true, false)

    If connected.

Since:

  • 2.0.0



44
45
46
# File 'lib/mongo/server/connection_common.rb', line 44

def connected?
  !!socket
end

#handshake_command(handshake_document) ⇒ Protocol::Message

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.

Build a command that should be used for connection handshake.

Parameters:

  • handshake_document (BSON::Document)

    Document that should be sent to a server for handshake purpose.

Returns:

  • (Protocol::Message)

    Command that should be sent to a server for handshake purposes.

Since:

  • 2.0.0



87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/mongo/server/connection_common.rb', line 87

def handshake_command(handshake_document)
  if handshake_document['apiVersion'] || handshake_document['loadBalanced']
    Protocol::Msg.new(
      [], {}, handshake_document.merge({ '$db' => Database::ADMIN })
    )
  else
    Protocol::Query.new(
      Database::ADMIN,
      Database::COMMAND,
      handshake_document,
      limit: -1
    )
  end
end

#handshake_document(app_metadata, speculative_auth_doc: nil, load_balancer: false, server_api: nil) ⇒ BSON::Document

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.

Build a document that should be used for connection handshake.

Parameters:

  • app_metadata (Server::AppMetadata)

    Application metadata

  • speculative_auth_doc (BSON::Document) (defaults to: nil)

    The speculative authentication document, if any.

  • load_balancer (true | false) (defaults to: false)

    Whether the connection is to a load balancer.

  • server_api (Hash | nil) (defaults to: nil)

    server_api Server API version.

Returns:

  • (BSON::Document)

    Document that should be sent to a server for handshake purposes.

Since:

  • 2.0.0



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/mongo/server/connection_common.rb', line 65

def handshake_document(, speculative_auth_doc: nil, load_balancer: false, server_api: nil)
  serv_api = .server_api || server_api
  document = if serv_api
               HELLO_DOC.merge(Utils.transform_server_api(serv_api))
             else
               LEGACY_HELLO_DOC
             end
  document.merge(.validated_document).tap do |doc|
    doc.update(speculativeAuthenticate: speculative_auth_doc) if speculative_auth_doc
    doc.update(loadBalanced: true) if load_balancer
  end
end