Clase: Mongo::Server::Monitor Privado
- Hereda:
-
Objeto
- Objeto
- Mongo::servidor::Monitor
- Ampliado por:
- Reenviable
- Incluye:
- BackgroundThread, Event::Publisher, Loggable
- Definido en:
- lib/mongo/server/monitor.rb,
lib/mongo/server/monitor/connection.rb,
lib/mongo/server/monitor/app_metadata.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.
Responsable de realizar consultas periódicas a un servidor a través de comandos hello para mantener actualizado el estado del servidor.
Realiza todo el trabajo en un hilo en segundo plano para no interferir con otras operaciones realizadas por el driver.
Definido bajo Namespace
clase: AppMetadata, Connection
Resumen de constantes colapsar
- DEFAULT_HEARTBEAT_INTERVAL =
Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada en el futuro.
El intervalo por defecto entre actualizaciones del estado del servidor es de 10 segundos.
10- MIN_SCAN_INTERVAL =
Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada en el futuro.
El tiempo mínimo entre escaneos forzados del servidor. minHeartbeatFrequencyMS en la especificación SDAM.
0.5- RTT_WEIGHT_FACTOR =
Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada en el futuro.
Obsoleto.Se eliminará en la versión 3.0.
El factor de ponderación (alfa) para calcular el tiempo promedio de ida y vuelta en movimiento.
0.2
Constantes incluidas desde Loggable
Resumen de atributos de la instancia colapsar
-
#monitoring ⇒ Monitoring
Solo lectura
privado
Supervisión La supervisión.
-
#options ⇒ Hash
Solo lectura
privado
Opciones Las opciones del servidor.
-
#server ⇒ Server
Solo lectura
privado
Servidor El servidor que este monitor está supervisando.
Atributos incluidos de Event::Publisher
Resumen del método de instancia colapsar
-
#cancel_check! ⇒ Object
privado
Cancele la comprobación en curso y cierre la conexión de supervisión.
-
#connection ⇒ Mongo::servidor::supervisar::Connection | nil
privado
La conexión que se debe usar, se lee bajo @connection_lock para que los que la llaman nunca observen una referencia obsoleta después de una cancelación_check concurrente. lo borra.
- #create_push_monitor!(topology_version, connection) ⇒ objeto privado
-
#do_work ⇒ Objeto
privado
Realiza una verificación del servidor.
-
#heartbeat_interval ⇒ Float
privado
El intervalo entre comprobaciones regulares del servidor.
-
#inicializar(servidor, event_listeners, supervisión, opciones = {}) ⇒ Supervisar
constructor
privado
Cree el nuevo monitor de servidor.
-
#push_monitor ⇒ Server::PushMonitor | nil
privado
El monitor de empuje, si se está utilizando uno.
-
#reinicio! ⇒ Hilo
privado
Reinicia el monitor del servidor a menos que el proceso actual esté todavía en ejecución.
- #run_sdam_flow(result, awaited: false, scan_error: nil, rtt_only: false) ⇒ objeto privado
-
#scan! ⇒ Descripción
privado
Realice una comprobación del servidor con limitación y actualice la descripción del servidor y el tiempo medio de ida y vuelta.
-
#stop! ⇒ true | false
Detener el hilo en segundo plano y esperar a que finalice durante un tiempo razonable.
- #stop_push_monitor! ⇒ objeto privado
- #to_s ⇒ Objeto privado
Métodos incluidos de BackgroundThread (Hilo de fondo)
Métodos incluidos desde Registrable
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Métodos incluidos de Event::Publisher
Detalles del Constructor
#inicializar(servidor, listeners_de_eventos, supervisión, opciones = {}) ⇒ Monitor
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.
El monitor nunca debe ser instanciado directamente fuera de un servidor.
Cree el nuevo monitor de servidor.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# Archivo 'lib/mongo/server/monitor.rb', línea 76 def inicializar(Server, event_listeners, Monitoring, = {}) propagar ArgumentError, "Tipo de supervisión incorrecto: #{supervisión.inspect}" a menos que Monitoring.is_a?(Monitoring) propagar ArgumentError, 'Los metadatos de la aplicación son obligatorios' a menos que [:app_metadata] propagar ArgumentError, 'Los metadatos de la aplicación de monitor de notificaciones son obligatorios' a menos que [:push_monitor_app_metadata] @server = Server @event_listeners = event_listeners @monitoring = Monitoring @options = .freeze @mutex = Mutex (exclusión mutua).Nuevo @sdam_mutex = Mutex (exclusión mutua).Nuevo @next_earliest_scan = @next_wanted_scan = Tiempo.ahora @update_mutex = Mutex (exclusión mutua).Nuevo # Protege las lecturas y guardar de @connection para que la conexión de sondeo pueda # se cancelará desde otro hilo. Según las especificaciones de supervisión del servidor # cancelCheck pseudocódigo, el bloqueo solo se mantiene el tiempo suficiente para copiar o # asigne la referencia, nunca a través de la comprobación de bloqueo. @connection_lock = Mutex (exclusión mutua).Nuevo end |
Detalles de atributo de instancias
#monitoring ⇒ Monitoring (readonly)
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.
Supervisión de devoluciones La supervisión.
127 128 129 |
# Archivo 'lib/mongo/server/monitor.rb', línea 127 def Monitoring @monitoring end |
#opciones ⇒ Hash (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 las opciones Opciones del servidor.
108 109 110 |
# Archivo 'lib/mongo/server/monitor.rb', línea 108 def @options end |
#servidor ⇒ Servidor (sólo 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.
Servidor de devoluciones El servidor que este supervisar está supervisando.
98 99 100 |
# Archivo 'lib/mongo/server/monitor.rb', línea 98 def Server @server end |
Detalles del método de instancia
#cancel_check! ⇒ 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.
Cancele la comprobación en curso y cierre la conexión de supervisión.
Se llama cuando el servidor se marca como Desconocido debido a un error de red, según la especificación de supervisión del servidor ("cancelación de hello o hello heredado"). Detiene el PushMonitor de transmisión (interrumpiendo su lectura de hello esperada) y cierra la conexión de sondeo, por lo que la siguiente comprobación debe establecer una nueva en lugar de volver a validar el servidor a través de un socket posiblemente inactivo.
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# Archivo 'lib/mongo/server/monitor.rb', línea 210 def cancel_check! stop_push_monitor! # Copie la referencia de conexión debajo del bloqueo, luego interrumpa y cierre # fuera del bloqueo. Cerrar el socket interrumpe cualquier proceso en curso # leer en el hilo de supervisar; nil-ing la referencia fuerza el siguiente # comprobar si se ha vuelto a conectar. El hilo de supervisión es el único escritor de un nuevo # conexión, por lo que es seguro que este hilo lo borre. Conexión = @connection_lock.sincronizar hacer conn = @connection @connection = nulo conn end Conexión&.¡desconectar! end |
#connection ⇒ Mongo::servidor::supervisar::Connection | nil
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 La conexión que se va a usar, lea en @connection_lock para que las personas que llaman nunca observen una referencia obsoleta después de un cancel_check simultáneo. lo borra.
103 104 105 |
# Archivo 'lib/mongo/server/monitor.rb', línea 103 def Conexión @connection_lock.sincronizar { @connection } end |
#create_push_monitor!(topology_version, connection) ⇒ Objeto
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.
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# Archivo 'lib/mongo/server/monitor.rb', línea 175 def create_push_monitor!(topology_version, Conexión) @update_mutex.sincronizar hacer @push_monitor = nulo si @push_monitor && !@push_monitor.¿corriendo? @push_monitor ||= PushMonitor.Nuevo( sí mismo, topology_version, Monitoring, **Utils.shallow_symbolize_keys(.fusionar( socket_timeout: intervalo_latido + Conexión.socket_timeout, app_metadata: [:push_monitor_app_metadata], check_document: Conexión.check_document )) ) end end |
#do_work ⇒ objeto
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.
Realiza una verificación del servidor.
140 141 142 143 144 145 146 147 148 149 150 151 152 |
# Archivo 'lib/mongo/server/monitor.rb', línea 140 def realizar_trabajo ¡escanear! # @next_wanted_scan puede ser actualizado por el monitor de push. # Sin embargo, debemos comprobar la bandera de terminación para que el monitor # El hilo se cierra cuando se solicita. bucle hacer delta = @next_wanted_scan - Tiempo.ahora break a menos que delta > 0 señalado = Server.scan_semaphore.esperar(delta) break si señalado || @solicitud_detencion end end |
#heartbeat_interval ⇒ Float
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.
El intervalo entre comprobaciones regulares del servidor.
113 114 115 |
# Archivo 'lib/mongo/server/monitor.rb', línea 113 def intervalo_latido [intervalo de latidos] || DEFAULT_HEARTBEAT_INTERVAL end |
#push_monitor ⇒ Server::PushMonitor | nil
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 monitor push, si se está utilizando uno.
131 132 133 134 135 |
# Archivo 'lib/mongo/server/monitor.rb', línea 131 def push_monitor @update_mutex.sincronizar hacer @push_monitor end end |
#reinicio! ⇒ Thread
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.
Reinicia el monitor del servidor a menos que el proceso actual esté todavía en ejecución.
308 309 310 311 312 313 314 |
# Archivo 'lib/mongo/server/monitor.rb', línea 308 def ¡reiniciar! si @thread && @thread.alive? @thread else ejecutar! end end |
#run_sdam_flow(result, awaited: false, scan_error: nil, rtt_only: false) ⇒ objeto
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.
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 |
# Archivo 'lib/mongo/server/monitor.rb', línea 268 def run_sdam_flow(Resultado, esperado: false, scan_error: nulo, rtt_only: false) @sdam_mutex.sincronizar hacer old_description = Server.Descripción # Una medición solo de RTT (protocolo de transmisión activo) no debe actualizarse # la topología o publicar eventos SDAM. El RTT que reunió es # incorporado en la siguiente descripción de transmisión-hello a través del # calculadora de RTT compartida. El cronograma a continuación sigue ejecutándose, por lo que el # supervisar mantiene el ritmo de sus comprobaciones. a menos que rtt_only new_description = Descripción.Nuevo( Server.dirección, Resultado, average_round_trip_time: Server.calculadora_de_tiempo_de_viaje_redondo.average_round_trip_time, minimum_round_trip_time: Server.calculadora_de_tiempo_de_viaje_redondo.minimum_round_trip_time ) Server.clúster.run_sdam_flow(Server.Descripción, new_description, esperado: en espera, scan_error: scan_error) end Server.Descripción.tocar hacer |new_description| a menos que en espera si new_description.¿desconocido? && !old_description.¿desconocido? @next_earliest_scan = @next_wanted_scan = Tiempo.ahora else @next_earliest_scan = Tiempo.ahora + MIN_SCAN_INTERVAL @next_wanted_scan = Tiempo.ahora + intervalo_latido end end end end end |
#scan! ⇒ Descripció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.
Si el reloj del sistema se atrasa, este método puede dormir durante mucho tiempo.
El valor de retorno de este método está obsoleto. En la versión 3.0.0, este método no tendrá un valor de retorno.
Realice una comprobación del servidor con limitación y actualice la descripción del servidor y el tiempo medio de ida y vuelta.
Si se revisó el servidor hace menos de MIN_SCAN_INTERVAL segundos, se debe esperar hasta que hayan pasado MIN_SCAN_INTERVAL segundos desde la última revisión. A continuación, realiza la verificación que implica ejecutar hello en el servidor que se está supervisando y actualizar la descripción del servidor como resultado.
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
# Archivo 'lib/mongo/server/monitor.rb', línea 244 def ¡escanear! # Normalmente, el hilo en segundo plano invocaría este método. # Pero también es posible invocar scan! directamente sobre un monitor. # Permitir que solo se realice un escaneo a la vez. @mutex.sincronizar hacer throttle_scan_frequency! # Cuando el protocolo de transmisión está activo, el PushMonitor es el # fuente SDAM autorizada y este análisis solo mide el RTT en el # conexión dedicada. Según la especificación de supervisión del servidor, un RTT # el comando NO DEBE publicar eventos ni actualizar la topología. Calcular # esto antes de do_scan, que puede (re)conectarse y cambiar el estado. rtt_only = ¿solo_medición_rtt? begin Resultado = do_scan(publish_heartbeat: !rtt_only) rescate StandardError => e run_sdam_flow({}, scan_error: e, rtt_only: rtt_only) else run_sdam_flow(Resultado, rtt_only: rtt_only) end end end |
#¡stop! ⇒ true | false
Detener el hilo en segundo plano y esperar a que finalice durante un tiempo razonable.
160 161 162 163 164 165 166 167 168 169 |
# Archivo 'lib/mongo/server/monitor.rb', línea 160 def ¡detente! stop_push_monitor! # Reenviar el valor de retorno de super super.tocar hacer # Importante: la desconexión debería ocurrir después del hilo en segundo plano # termina. Conexión&.¡desconectar! end end |
#stop_push_monitor! ⇒ objeto
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.
192 193 194 195 196 197 198 199 |
# Archivo 'lib/mongo/server/monitor.rb', línea 192 def stop_push_monitor! @update_mutex.sincronizar hacer si @push_monitor @push_monitor.¡detente! @push_monitor = nulo end end end |
#to_s ⇒ 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.
316 317 318 |
# Archivo 'lib/mongo/server/monitor.rb', línea 316 def to_s "#<#{self.clase.name}:#{object_id} #{servidor.address}>" end |