Clase: Mongo::servidor::supervisar::Connection Privado

Hereda:
ConnectionCommon Mostrar todo
Incluye:
Registrable
Definido en:
lib/mongo/servidor/supervisar/connection.rb

Overview

Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.

Esta clase modela las conexiones de monitoreo y su comportamiento.

Desde:

  • 2.0.0

Resumen constante

Constantes incluidas desde Loggable

Loggable::PREFIX

Resumen de atributos de la instancia colapsar

Atributos heredados de ConnectionCommon

#compressor, #pid

Resumen del método de instancia colapsar

Métodos incluidos desde Registrable

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

Métodos heredados de ConnectionCommon

#¿conectado?, #comando_de_apretón_de_manos, #documento_de_apretón_de_manos

Detalles del Constructor

#inicializar(dirección, opciones = {}) ⇒ Conexión

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Las conexiones de supervisión no se autentican.

Crea un nuevo objeto de conexión a la dirección de destino especificada con las opciones indicadas.

El constructor no realiza ninguna operación de E/S (por lo que no crea sockets ni «handshakes»); llama a connect! método en el objeto de conexión para crear la conexión de red.

Parámetros:

  • dirección (Mongo::Address)

    La dirección para la que se utiliza la conexión.

  • opciones (encriptada) (por defecto: {})

    Las opciones de conexión.

Opciones Hash (options):

  • :app_metadata (Mongo::servidor::supervisar::AppMetadata)

    Metadatos para usar en el intercambio de señales. Si falta o es nulo, no se realizará el intercambio de señales. Aunque también funcionará una instancia de Mongo::Server::AppMetadata, las conexiones de supervisión están destinadas a usar instancias de Mongo::Server::Monitor::AppMetadata para omitir la negociación SCRAM con el servidor, ya que los sockets de supervisión no se autentican.

  • compresores (arreglo<String>)

    Una lista de posibles compresores a utilizar, en orden de preferencia. El controlador elige el primer compresor que también es compatible con el servidor. Actualmente, el controlador solo admite 'zstd', 'snappy' y 'zlib'.

  • timeout_conexión (Flotante)

    El tiempo de espera, en segundos, a utilizar para las operaciones de red. Este tiempo de espera se utiliza para todas las operaciones de socket en lugar de sólo llamadas de conexión, contrariamente a lo que implica el nombre,

Aumenta:

  • (ArgumentError)

Desde:

  • 2.0.0



56
57
58
59
60
61
62
63
64
65
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 56

def inicializar(dirección, opciones = {})
  @address = dirección
  @options = opciones.dup.freeze
  propagar ArgumentError, 'Los metadatos de la aplicación son obligatorios' a menos que @app_metadata = opciones[:app_metadata]

  @socket = nulo
  @pid = Proceso.pid
  @compressor = nulo
  @hello_ok = false
end

Detalles de atributo de instancias

#DirecciónMongo::Address (solo lectura)

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Dirección de devoluciones La dirección a la que conectarse.

Devuelve:

Desde:

  • 2.0.0



71
72
73
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 71

def dirección
  @address
end

#opcionesHash (solo lectura)

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Opciones de devolución Las opciones que se pasan.

Devuelve:

  • (encriptada)

    opciones Las opciones introducidas.

Desde:

  • 2.0.0



68
69
70
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 68

def opciones
  @options
end

#id_conexión_servidorEntero (solo lectura)

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve server_connection_id El id de conexión del servidor.

Devuelve:

  • (Número entero)

    server_connection_id El ID de conexión del servidor.

Desde:

  • 2.0.0



87
88
89
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 87

def server_connection_id
  @server_connection_id
end

Detalles del método de instancia

#check_documentBSON::Document

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Compilar un documento que se debe usar para la verificación de la conexión.

Devuelve:

  • (BSON::Document)

    Documento que debe ser enviado a un servidor para comprobar la conexión.

Desde:

  • 2.0.0



224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 224

def check_document
  server_api = @app_metadata.server_api || opciones[API del servidor]
  doc = si hello_ok? || server_api
          _doc = HELLO_DOC
          _doc = _doc.fusionar(Utils.transform_server_api(server_api)) si server_api
          _doc
        else
          HELLO_DOC_ANTIGUO
        end
  # Los compresores deben ajustarse para mantener un estado de compresión correcto
  # en la descripción del servidor. Ver RUBY-2427
  si compresores = opciones[compresores]
    doc = doc.fusionar(compresión: compresores)
  end
  doc
end

#¡conectar!true

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Este método muta la clase de conexión al establecer un socket si anteriormente no existía uno.

Establece una conexión de red con la dirección de destino.

Si la conexión ya está establecida, este método no hace nada.

Ejemplos:

Conéctese al host.

connection.connect!

Devuelve:

  • (cierto)

    Si la conexión tuvo éxito.

Aumenta:

  • (ArgumentError)

Desde:

  • 2.0.0



151
152
153
154
155
156
157
158
159
160
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 151

def ¡conectar!
  propagar ArgumentError, 'Conexión de supervisión ya conectada' si @socket

  @socket = add_server_diagnostics hacer
    dirección.enchufe(socket_timeout, ssl_options.fusionar(
                                     connection_address: dirección, supervisar: true
                                   ))
  end
  true
end

#disconnect!(_options = nil) ⇒ true

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Este método muta la conexión estableciendo el socket en nil si el cierre tuvo éxito.

Nota:

Este método acepta un argumento de opciones para compatibilidad con Server::Connections. Sin embargo, se ignoran todas las opciones.

Desconecte la conexión.

Ejemplos:

Desconéctate del host.

connection.disconnect!

Devuelve:

  • (cierto)

    Si la desconexión tuvo éxito.

Desde:

  • 2.0.0



176
177
178
179
180
181
182
183
184
185
186
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 176

def ¡desconectar!(_opciones = nulo)
  si enchufe
    begin
      enchufe.Cerrar
    rescate StandardError
      nulo
    end
    @socket = nulo
  end
  true
end

#dispatch(message) ⇒ Protocol::Message

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Envía un mensaje y devuelve el resultado.

Parámetros:

Devuelve:

Desde:

  • 2.0.0



94
95
96
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 94

def enviar(mensaje)
  despacho_bytes(mensaje.serializar.to_s)
end

#dispatch_bytes(bytes, **opts) ⇒ Protocol::Message

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Envía un mensaje pre-serializado y devuelve el resultado.

Parámetros:

  • bytes (string)

    El mensaje serializado que se debe enviar.

  • opciones (encriptada)

    un conjunto personalizable de opciones

Hash de opciones (**opts):

  • Tiempo_de_espera_de_lectura_del_socket (Numérico)

    El tiempo de espera que se utilizará para cada operación de lectura.

Devuelve:

Desde:

  • 2.0.0



106
107
108
109
110
111
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 106

def despacho_bytes(bytes, **opciones)
  write_bytes(bytes)
  read_response(
    socket_timeout: opciones[Tiempo_de_espera_de_lectura_del_socket]
  )
end

#handshake!BSON::Document

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Envía el comando de saludo al host conectado y valida la respuesta.

Devuelve:

  • (BSON::Document)

    Respuesta de apretón de manos del servidor

Aumenta:

Desde:

  • 2.0.0



193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 193

def handshake!
  Comando = handshake_command(
    documento_handshake(
      @app_metadata,
      server_api: opciones[API del servidor]
    )
  )
  payload = Comando.serializar.to_s
  mensaje = despacho_bytes(payload)
  Resultado = Operación::Resultado.Nuevo(mensaje)
  Resultado.validate!
  respuesta = Resultado.Documentos.primero
  set_compressor!(respuesta)
  set_hello_ok!(respuesta)
  @server_connection_id = respuesta['connectionId']
  respuesta
rescate StandardError => e
  msg = "Error durante el handshake con #{address}"
  Utils.warn_bg_exception(msg, e,
                          logger: opciones[:logger],
                          log_prefix: opciones[log_prefix],
                          bg_error_backtrace: opciones[:bg_error_backtrace])
  propagar
end

#read_response(**opts) ⇒ Object

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Parámetros:

  • opciones (encriptada)

    un conjunto personalizable de opciones

Hash de opciones (**opts):

  • timeout_del_socket (Numérico)

    El tiempo de espera que se utilizará para cada operación de lectura.

Aumenta:

  • (ArgumentError)

Desde:

  • 2.0.0



125
126
127
128
129
130
131
132
133
134
135
136
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 125

def read_response(**opciones)
  propagar ArgumentError, "Intentando leer en una conexión no conectada #{self}" a menos que ¿conectado?

  add_server_connection_id hacer
    add_server_diagnostics hacer
      protocolo::Mensaje.deserializar(enchufe,
                                    protocolo::Mensaje::MAX_MESSAGE_SIZE,
                                    nulo,
                                    **opciones)
    end
  end
end

#socket_timeoutFlotante

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve el tiempo de espera de confirmación del socket de supervisión.

Tenga en cuenta que las conexiones de supervisión utilizan el valor de tiempo de espera de conexión como el valor de tiempo de espera del socket. Consulte la especificación de Descubrimiento y supervisión del servidor para más detalles.

Devuelve:

  • (Float)

    El tiempo de espera del socket en segundos.

Desde:

  • 2.4.3



82
83
84
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 82

def socket_timeout
  opciones[timeout_conexión] || Server::CONNECT_TIMEOUT
end

#write_bytes(bytes) ⇒ Object

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Aumenta:

  • (ArgumentError)

Desde:

  • 2.0.0



113
114
115
116
117
118
119
120
121
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 113

def write_bytes(bytes)
  propagar ArgumentError, "Intentando enviar en una conexión no conectada #{self}" a menos que ¿conectado?

  add_server_connection_id hacer
    add_server_diagnostics hacer
      enchufe.guardar(bytes)
    end
  end
end