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
Resumen de atributos de la instancia colapsar
-
#hedge ⇒ Hash | nil
Solo lectura
Hedge El documento especifica si se deben habilitar lecturas protegidas.
-
#max_staleness ⇒ Integer
Solo lectura
Max_staleness El atraso de la replicación máximo, en segundos, que una secundaria 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.
Resumen del método de instancia colapsar
-
#==(otro) ⇒ true, false
Comprueba la igualdad de dos selectores de servidor.
-
# candidatos(clúster) ⇒arreglo<Server>
privado
Devuelve servidores de tipos aceptables del clúster.
-
#initialize(options = nil) ⇒ Base
constructor
privado
Inicializa el selector de servidores.
-
#inspeccionar ⇒ Cadena
Inspeccione el selector de servidor.
-
#umbral_local ⇒ Flotante
Obsoleto
Obsoleto.
Ahora se toma esta configuración de las opciones del clúster cuando se selecciona un servidor. Se eliminará en la versión 3.0.
- #local_threshold_with_clúster(clúster) ⇒ objeto privado
-
#select_server(clúster, ping = nil, session = nil, write_aggregation: false, deprioritized: [], timeout: nil) ⇒ Mongo::Servidor
Selecciona un servidor del clúster especificado, teniendo en cuenta el pinning de mongos para la sesión especificada.
-
#tiempo_de_espera_de_selección_del_servidor ⇒ Flotante
Obsoleto
Obsoleto.
Ahora se toma esta configuración de las opciones del clúster cuando se selecciona un servidor. Se eliminará en la versión 3.0.
-
#suitable_servers(clúster) ⇒ arreglo<Server>
privado
Devuelve servidores que cumplan con el selector de servidores del clúster.
-
#intentar_seleccionar_servidor(clúster, write_aggregation: falso, depriorizado: []) ⇒ Servidor | nil
privado
Intenta encontrar un servidor adecuado, devuelve el servidor si hay uno disponible o nil 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.
Inicializa el selector de servidores.
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 @options = @tag_sets = [:conjuntos de etiquetas] || [] @max_staleness = [max_staleness] @hedge = [:hedge] validate! end |
Detalles de los atributos de instancia
#hedge ⇒ hash | nil (solo lectura)
Devuelve hedge El documento que especifica si se debe habilitar lecturas protegidas.
76 77 78 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 76 def hedge @hedge end |
#max_staleness ⇒ Integer (solo lectura)
Devuelve max_staleness El máximo atraso de la replicación, en segundos, que un secundario puede experimentar 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 @options end |
#tag_sets ⇒ arreglo (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 tag_sets @tag_sets end |
Detalles del método de instancia
#==(otro) ⇒ true, false
Comprueba 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 && tag_sets == Otros.tag_sets end |
#candidatos(clúster) ⇒ arreglo<Servidor>
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 o 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/a? 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 |
#inspect ⇒ String
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 |
#local_threshold ⇒ Float
Ahora se toma esta configuración de las opciones del clúster cuando se selecciona 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 @local_threshold ||= ([:umbral_local] || ServerSelector::UMBRAL_LOCAL) end |
#local_threshold_with_cluster(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 local_threshold_with_cluster(clúster) [:umbral_local] || clúster.[:umbral_local] || UMBRAL_LOCAL end |
#select_server(clúster, ping = nil, session = nil, write_aggregation: false, deprioritized: [], timeout: nil) ⇒ Mongo::Servidor
Selecciona un servidor del clúster especificado, teniendo en cuenta el pinning 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 especifica una sesión o la sesión no tiene un servidor fijado, se realiza el proceso normal de selección de servidor entre todos los servidores en el clúster especificado que coincidan con la preferencia de este objeto selector de servidores. Los chequeos de supervisión se inician en los servidores del clúster hasta que se encuentra un servidor adecuado, hasta agotarse el tiempo de espera para la selección del servidor.
Si no se encuentra un servidor adecuado dentro del tiempo de espera de selección de servidor, este método arroja 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, escribir_agrupacion: false, con menor prioridad: [], timeout: nulo ) select_server_impl(clúster, ping, sesión, agregación_de_escritura, despriorizado, tiempo de espera).tocar hacer |Server| si Lint.¿habilitado? && !Server.group.¿Listo? propagar Error::LintError, 'Selector de servidor devolviendo un servidor con un conjunto que no está listo' end end end |
#servidor_selección_tiempo_fuera ⇒ Flotante
Ahora se toma esta configuración de las opciones del clúster cuando se selecciona 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 @server_selection_timeout ||= ([:server_selection_timeout] || ServerSelector::SERVER_SELECTION_TIMEOUT) end |
#suitable_servers(clúster) ⇒ arreglo<Servidor>
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 cumplan con el selector de servidores 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/a? candidatos(clúster) elsif clúster.¿fragmentado? umbral_local = local_threshold_with_cluster(clúster) servidores = candidatos(clúster) near_servers(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(cluster, write_aggregation: false, deprioritized: []) ⇒ Servidor | nil
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 nil 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, escribir_agrupacion: false, con menor prioridad: []) 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.disminuir(true) hacer |res, Server| res && Server.Funcionalidades.merge_out_on_secondary_enabled? 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, recurrimos al primario para el set de réplicas. [clúster.servidores.detectar(Yprimario/a?)] end else servidores_adecuados(clúster) end # Esta lista de servidores puede ordenarse de una manera específica # por el selector (por ejemplo, para secundario preferente, 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.¿habilitado? # 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 lint no es una funcionalidad pública, si/cuando lo sea # cambios (https://jira.mongodb.org/browse/RUBY-1576) el/la # sería necesario eliminar el requisito para que ARTT no sea nulo. si Server.average_round_trip_time.nil? propagar Error::LintError, "Servidor #{servidor.dirección} tiene rtt promedio nulo" end end end Server end |