Clase: Mongo::Server::PushMonitor Privado
- Hereda:
-
Objeto
- Objeto
- Mongo::Servidor::PushMonitor
- Ampliado por:
- Reenviable
- Incluye:
- Hilo de fondo
- Definido en:
- lib/mongo/server/push_monitor.rb,
lib/mongo/server/push_monitor/connection.rb
Overview
Esta clase forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.
Un monitor que utiliza solicitudes de saludo enviadas por el servidor.
Cuando un Monitor se conecta con un servidor 4.4+, crea una instancia de PushMonitor. PushMonitor ejecuta posteriormente un saludo enviado por el servidor (es decir, un saludo esperado y agotado) para recibir los cambios de topología del servidor lo más rápido posible. El Monitor sigue supervisando el servidor para calcular el tiempo de ida y vuelta y para realizar comprobaciones inmediatas según lo solicite la aplicación.
Definido en el espacio de nombres
Clases: Conexión
Resumen constante
Constantes incluidas desde Loggable
Colapso delresumen de atributos de instancia
-
#monitor ⇒ Server
solo lectura
privada
El servidor que está siendo monitoreado.
-
#monitoring ⇒ Monitoring
solo lectura
privada
Monitoreo El monitoreo.
-
#options ⇒ Hash
solo lectura
privada
Opciones del monitor de empuje.
-
#topology_version ⇒ TopologyVersion
solo lectura
privada
Versión de topología recibida más recientemente.
Colapso del resumen del método de instancia
- #comprobar ⇒ Objeto privada
- #do_work ⇒ Objeto privada
-
#inicializar(monitor, topología_versión, monitoreo, **opciones) ⇒ PushMonitor
constructor
privada
Una nueva instancia de PushMonitor.
- #read_response ⇒ Objeto privada
- #¡comienza! ⇒ Objeto privada
- #¡Alto! ⇒ Objeto privada
- #to_s ⇒ Objeto privada
- #comando_de_comprobación_de_escritura ⇒ Objeto privada
Métodos incluidos desde BackgroundThread
#corre!, #corriendo?
Métodos incluidos en Loggable
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Detalles del constructor
#inicializar(monitor, topología_versión, monitoreo, **opciones) ⇒ PushMonitor
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve una nueva instancia de PushMonitor.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 35 def inicializar(Supervisar, versión_de_topología, vigilancia, **) Si versión_de_topología.nil? propagar ArgumentError, 'Sedebe proporcionar la versión de topología pero fue nula' end a no ser que [:app_metadata] propagar ArgumentError, 'Los metadatos de la aplicación son obligatorios' end a no ser que [:verificar_documento] propagar ArgumentError, 'Serequiere comprobar documento' end @app_metadata = [:app_metadata] @check_document = [:verificar_documento] @monitor = Supervisar @topology_version = versión_de_topología @monitoring = vigilancia @opciones = @cerrar = Mutex.Nuevo end |
Detalles de los atributos de instancia
#monitor ⇒ Servidor (solo lectura)
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve el servidor que está siendo monitoreado.
55 56 57 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 55 def Supervisar @monitor end |
#monitoring ⇒ Monitoring (readonly)
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Monitoreo de devoluciones El monitoreo.
61 62 63 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 61 def vigilancia @monitoring end |
#opciones ⇒ Hash (solo lectura)
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve las opciones del monitor Push.
64 65 66 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 64 def @opciones end |
#topology_version ⇒ TopologyVersion (solo lectura)
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve la versión de topología recibida más recientemente.
58 59 60 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 58 def versión_de_topología @topology_version end |
Detalles del método de instancia
#comprobar ⇒ Objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 137 def check @cerrar.sincronizar hacer Si @conexión && @conexión.pid != Proceso.pid advertencia de registro("Sedetectó un cambio de PID: el cliente Mongo debería haberse reconectado (pid antiguo n.° {@connection.pid}, pid nuevo n.° {Process.pid}") @conexión.¡desconectar! @conexión = nulo end end @cerrar.sincronizar hacer a no ser que @conexión @server_pushing = false conexión = Monitor de empuje::Conexión.Nuevo(Server.dirección, ) conexión.¡conectar! @conexión = conexión end end resp_msg = begin a no ser que @server_pushing comando de comprobación de escritura end read_response rescate Mongo::Error @cerrar.sincronizar hacer @conexión.¡desconectar! @conexión = nulo end propagar end @server_pushing = resp_msg.flags.¿incluir?(:más por venir) resultado = Operación::Resultado.Nuevo(resp_msg) resultado.validate! resultado.Documentos.primera end |
#do_work ⇒ objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 94 def hacer_trabajo @cerrar.sincronizar hacer return Si @stop_requested end resultado = vigilancia.publicar_latido(Server, esperado: true) hacer check end new_description = Supervisar.ejecutar_sdam_flow(resultado, esperado: true) # Cuando falla el saludo debido a un punto de falla, la respuesta no # incluir la versión de topología. En este caso, necesitamos mantener nuestra versión existente. # versión de topología para que podamos reanudar el monitoreo. # La especificación no parece abordar este caso directamente, pero # https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-monitoring.md#streamable-hello-or-legacy-hello-command # dice que topologyVersion solo debe actualizarse si es exitoso # hola respuestas. Si new_description.versión_de_topología @topology_version = new_description.versión_de_topología end rescate IOError, Error de socket, SystemCallError, Mongo::Error => Excª parada solicitada = @cerrar.sincronizar { @stop_requested } Si parada solicitada # Ignore la excepción, consulte RUBY-2771. return end msg = "Erroral ejecutar el saludo esperado en #{server. address}" Utils.advertencia_bg_excepción(msg, Excª, logger: [:logger], prefijo_de_registro: [:prefijo_de_registro], bg_error_backtrace: [:bg_error_backtrace], ) # Si una solicitud falla en una conexión, detenga la monitorización de push. # En caso de que el servidor esté muerto no queremos tener dos conexiones # intentando conectarse sin éxito al mismo tiempo. ¡detener! # Solicitar una verificación inmediata del monitor para ser reinstalado como # lo antes posible en caso de que el servidor esté realmente activo. Server.semáforo de escaneo.señal end |
#read_response ⇒ Objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 184 def read_response Si tiempo de espera = [:tiempo de espera de conexión] Si tiempo de espera < 0 propagar Mongo::Error de tiempo de espera del socket, "Sesolicitó lectura con un tiempo de espera negativo: #{ }" elsif tiempo de espera > 0 tiempo de espera += [:frecuencia_del_latido] || Supervisar::INTERVALO DE LATIDO PREDETERMINADO end end # Establecemos el tiempo de espera dos veces: una vez pasado a read_socket que se aplica # a cada operación de lectura individual, y nuevamente en toda la lectura. Se acabó el tiempo.tiempo de espera(tiempo de espera, Error::Error de tiempo de espera del socket, "Nose pudo leer una respuesta de saludo esperada en #{timeout} segundos") hacer @cerrar.sincronizar { @conexión }.read_response(socket_timeout: tiempo de espera) end end |
#¡comienza! ⇒ Objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
69 70 71 72 73 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 69 def ¡comenzar! @cerrar.sincronizar hacer Super end end |
#¡Alto! ⇒ Objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 75 def ¡detener! @cerrar.sincronizar hacer @stop_requested = true Si @conexión # Interrumpe cualquier lectura "hello" agotada en progreso por # desconectando la conexión. @conexión.Enviar(:enchufe).cerrar rescate nulo end end Super.grifo hacer @cerrar.sincronizar hacer Si @conexión @conexión.¡desconectar! @conexión = nulo end end end end |
#to_s ⇒ Objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
199 200 201 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 199 def a_s "#<#{self.clase.name}:#{object_id} #{servidor.address}>" end |
#comando_de_comprobación_de_escritura ⇒ Objeto
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
173 174 175 176 177 178 179 180 181 182 |
# Archivo 'lib/mongo/server/push_monitor.rb', línea 173 def comando de comprobación de escritura Documento = @check_document.unir( topologyVersion: versión_de_topología.to_doc, Tiempo de espera máximo MS: Supervisar.intervalo de latidos * 1000, ) Comando = Protocolo::Msg.Nuevo( [:escape_permitido], {}, Documento.unir({'$db' => Database::ADMINISTRACIÓN}) ) @cerrar.sincronizar { @conexión }.escritura_bytes(Comando.fabricar en serie.a_s) end |