Clase: Mongo::ServerSelector::Base
- Hereda:
-
Objeto
- Objeto
- Mongo::ServerSelector::Base
- Definido en:
- lib/mongo/server_selector/base.rb
Overview
Subclases conocidas directas
Más cercano, Principal, Primario preferido, Secundario, Secundario preferido
Colapso delresumen de atributos de instancia
-
#hedge ⇒ Hash | nil
solo lectura
Hedge El documento especifica si se deben habilitar lecturas protegidas.
-
#max_staleness ⇒ Integer
solo lectura
Max_staleness El retraso de replicación máximo, en segundos, que un secundario puede sufrir y aún ser elegible para una lectura.
-
#options ⇒ Hash
solo lectura
Opciones Las opciones.
-
#tag_sets ⇒ Array
solo lectura
Tag_sets Los conjuntos de etiquetas utilizados para seleccionar servidores.
Colapso del resumen del método de instancia
-
#==(otro) ⇒ true, false
Comprobar la igualdad de dos selectores de servidor.
-
# candidatos (clúster) ⇒Array<Server>
privada
Devuelve servidores de tipos aceptables del clúster.
-
#initialize(options = nil) ⇒ Base
constructor
privada
Inicializar el selector de servidor.
-
#inspeccionar ⇒ Cadena
Inspeccione el selector de servidor.
-
#umbral_local ⇒ Flotante
Obsoleto
Obsoleto.
Esta configuración ahora se toma de las opciones del clúster al seleccionar un servidor. Se eliminará en la versión 3.0.
- #umbral_local_con_clúster(clúster) ⇒ Objeto privada
-
#select_server(clúster, ping = nulo, sesión = nulo, agregación_de_escritura: falso, despriorizado: [], tiempo de espera: nulo) ⇒ Mongo::Server
Seleccione un servidor del clúster especificado, teniendo en cuenta la fijación de mongos para la sesión especificada.
-
#tiempo_de_espera_de_selección_del_servidor ⇒ Flotante
Obsoleto
Obsoleto.
Esta configuración ahora se toma de las opciones del clúster al seleccionar un servidor. Se eliminará en la versión 3.0.
-
#servidores_adecuados(clúster) ⇒ Matriz<Server>
privada
Devuelve servidores que satisfacen el selector de servidor del clúster.
-
#intentar_seleccionar_servidor(clúster, write_aggregation: falso, depriorizado: []) ⇒ Servidor | nil
privada
Intenta encontrar un servidor adecuado, devuelve el servidor si hay uno disponible o nulo si no hay un servidor adecuado.
Detalles del constructor
#initialize(options = nil) ⇒ Base
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Inicializar el selector de servidor.
49 50 51 52 53 54 55 56 57 58 59 60 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 49 def inicializar( = nulo) = ? .dup : {} Si [:max_staleness] == -1 .borrar(:max_staleness) end @opciones = @tag_sets = [:conjuntos de etiquetas] || [] @max_staleness = [:max_staleness] @hedge = [:cobertura] validate! end |
Detalles de los atributos de instancia
#cobertura ⇒ Hash | nulo (solo lectura)
Devuelve cobertura El documento que especifica si se deben habilitar lecturas con cobertura.
76 77 78 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 76 def hedge @hedge end |
#max_staleness ⇒ Entero (solo lectura)
Devuelve max_staleness El retraso de replicación máximo, en segundos, que un secundario puede sufrir y aún ser elegible para una lectura.
72 73 74 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 72 def max_staleness @max_staleness end |
#opciones ⇒ Hash (solo lectura)
Devuelve opciones Las opciones.
63 64 65 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 63 def @opciones end |
#tag_sets ⇒ Matriz (solo lectura)
Devuelve tag_sets Los conjuntos de etiquetas utilizados para seleccionar servidores.
66 67 68 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 66 def conjuntos de etiquetas @tag_sets end |
Detalles del método de instancia
#==(otro) ⇒ true, false
Comprobar la igualdad de dos selectores de servidor.
136 137 138 139 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 136 def ==(otros) Nombre == otros.Nombre && hedge == otros.hedge && max_staleness == otros.max_staleness && conjuntos de etiquetas == otros.conjuntos de etiquetas end |
#candidatos(clúster) ⇒ Matriz
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 servidores de tipos aceptables del clúster.
No realiza validación de obsolescencia, filtrado de obsolescencia ni filtrado de latencia.
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 403 def candidatos(clúster) servidores = clúster.servidores servidores.cada hacer |Server| ¡validar_el_soporte_de_cantidad_máxima!(Server) end Si clúster.¿soltero? servidores elsif clúster.¿fragmentado? servidores elsif clúster.replica_set? seleccionar_en_conjunto_de_réplicas(servidores) else # Clúster desconocido - sin servidores [] end end |
#inspeccionar ⇒ Cadena
Inspeccione el selector de servidor.
122 123 124 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 122 def inspeccionar "#<#{self.class.name}:0x#{object_id} tag_sets=#{tag_sets.inspect} max_staleness=#{max_staleness.inspect} hedge=#{hedge}>" end |
#umbral_local ⇒ Flotante
Esta configuración ahora se toma de las opciones del clúster al seleccionar un servidor. Se eliminará en la versión 3.0.
Obtenga el límite del umbral local para la selección más cercana en segundos.
105 106 107 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 105 def umbral local @umbral_local ||= ([:umbral_local] || Selector de servidor::UMBRAL_LOCAL) end |
#umbral_local_con_clúster(clúster) ⇒ 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.
110 111 112 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 110 def umbral_local_con_clúster(clúster) [:umbral_local] || clúster.[:umbral_local] || UMBRAL_LOCAL end |
#select_server(clúster, ping = nulo, sesión = nulo, agregación_de_escritura: falso, despriorizado: [], tiempo de espera: nulo) ⇒ Mongo::Server
Seleccione un servidor del clúster especificado, teniendo en cuenta la fijación de mongos para la sesión especificada.
Si se proporciona la sesión y tiene un servidor fijado, este es el único servidor considerado para la selección. Si el servidor es de tipo mongos, se devuelve inmediatamente; de lo contrario, se inician comprobaciones de monitorización en este servidor para actualizar su estado, y si el servidor se convierte en mongos dentro del tiempo de espera de selección, se devuelve.
Si no se proporciona ninguna sesión o esta no tiene un servidor asignado, se realiza el proceso normal de selección de servidores entre todos los servidores del clúster especificado que coincidan con la preferencia de este objeto selector de servidores. Se inician comprobaciones de monitorización en los servidores del clúster hasta encontrar un servidor adecuado, hasta que se agote el tiempo de espera de selección.
Si no se encuentra un servidor adecuado dentro del tiempo de espera de selección de servidor, este método genera Error::NoServerAvailable.
183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 183 def seleccionar_servidor( clúster, ping = nulo, sesión = nulo, agregación_de_escritura: false, despriorizado: [], timeout: nulo ) seleccionar_servidor_impl(clúster, ping, sesión, agregación_de_escritura, despriorizado, tiempo de espera).grifo hacer |Server| Si Lint.¿activado? && !Server.Piscina.¿listo? propagar Error::LintError, 'El selector de servidor devuelve un servidor con un grupo que no está listo' end end end |
#tiempo_de_espera_de_selección_del_servidor ⇒ Flotante
Esta configuración ahora se toma de las opciones del clúster al seleccionar un servidor. Se eliminará en la versión 3.0.
Obtener el tiempo de espera para la selección del servidor.
89 90 91 92 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 89 def tiempo de espera de selección de servidor @tiempo de espera de selección de servidor ||= ([:server_selection_timeout] || Selector de servidor::TIEMPO DE ESPERA DE SELECCIÓN DE SERVIDOR) end |
#servidores_adecuados(clúster) ⇒ Matriz
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 servidores que satisfacen el selector de servidor del clúster.
427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 427 def servidores adecuados(clúster) Si clúster.¿soltero? candidatos(clúster) elsif clúster.¿fragmentado? umbral local = umbral_local_con_clúster(clúster) servidores = candidatos(clúster) servidores cercanos(servidores, umbral local) elsif clúster.replica_set? validate_max_staleness_value!(clúster) candidatos(clúster) else # Clúster desconocido - sin servidores [] end end |
#try_select_server(clúster, agregación_de_escritura: falso, despriorizado: []) ⇒ Servidor | nulo
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Intenta encontrar un servidor adecuado, devuelve el servidor si hay uno disponible o nulo si no hay un servidor adecuado.
352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 352 def try_select_server(clúster, agregación_de_escritura: false, despriorizado: []) servidores = Si agregación_de_escritura && clúster.replica_set? # 1. Verifique si TODOS los servidores en el clúster admiten escrituras secundarias. es_escritura_compatible = clúster.servidores.reducir(true) hacer |res, Server| res && Server.características.¿Fusionar en secundaria habilitada? end Si es_escritura_compatible # 2. Si todos los servidores admiten escrituras secundarias, respetamos la preferencia de lectura. servidores adecuados(clúster) else # 3. De lo contrario, volvemos al principal para el conjunto de réplicas. [clúster.servidores.detectar(Y:¿primario?)] end else servidores adecuados(clúster) end # Esta lista de servidores puede ordenarse de una manera específica # por el selector (por ejemplo, para el secundario preferido, el primero # el servidor puede ser secundario y el segundo servidor puede ser primario) # y deberíamos tomar el primer servidor aquí respetando el orden Server = servidor adecuado(servidores, despriorizado) Si Server Si Lint.¿activado? # Es posible que un servidor tenga un RTT promedio nulo aquí # porque el ARTT proviene de una descripción que puede actualizarse # por un hilo en segundo plano mientras se ejecuta la selección del servidor. # Actualmente el modo pelusa no es una función pública, si/cuando esto # cambios (https://jira.mongodb.org/browse/RUBY-1576) el # Sería necesario eliminar el requisito de que ARTT no sea nulo. Si Server.tiempo promedio de ida y vuelta.nil? propagar Error::LintError, "Elservidor n.° {server. address} tiene un RTT promedionulo" end end end Server end |