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, Primario, PrimarioPreferido, Secundario, SecundarioPreferido
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, depriorizados = []) ⇒arreglo<Server>
privado
Devuelve servidores de tipos aceptables desde el clúster.
-
#initialize(options = nil) ⇒ Base
constructor
privado
Inicializa el selector de servidores.
-
#inspect ⇒ string
Inspecciona el selector de servidor.
-
#local_threshold ⇒ Float
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.
-
#server_selection_timeout ⇒ 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, deprioritized = []) ⇒ 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 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.
Inicializa el selector de servidores.
45 46 47 48 49 50 51 52 53 54 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 45 def inicializar( = nulo) = ? .dup : {} .borrar(max_staleness) si [max_staleness] == -1 @options = @tag_sets = [Conjuntos de etiquetas] || [] @max_staleness = [max_staleness] @hedge = [:hedge] validate! end |
Detalles de atributo de instancias
#hedge ⇒ hash | nil (solo lectura)
Devuelve hedge El documento que especifica si se debe habilitar lecturas protegidas.
70 71 72 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 70 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.
66 67 68 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 66 def max_staleness @max_staleness end |
#opciones ⇒ Hash (solo lectura)
Devuelve opciones Las opciones.
57 58 59 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 57 def @options end |
#tag_sets ⇒ arreglo (solo lectura)
Devuelve tag_sets Los conjuntos de etiquetas utilizados para seleccionar servidores.
60 61 62 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 60 def tag_sets @tag_sets end |
Detalles del método de instancia
#==(otro) ⇒ true, false
Comprueba la igualdad de dos selectores de servidor.
130 131 132 133 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 130 def ==(Otros) Nombre == Otros.Nombre && hedge == Otros.hedge && max_staleness == Otros.max_staleness && tag_sets == Otros.tag_sets end |
#candidatos(clúster, despriorizados = []) ⇒ arreglo<servidor>
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 servidores de tipos aceptables desde el clúster.
No realiza validación de obsolescencia, filtrado de obsolescencia o filtrado de latencia.
386 387 388 389 390 391 392 393 394 395 396 397 398 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 386 def candidatos(clúster, rebajado de prioridad = []) servidor = clúster.servidor.rechazar { |s| rebajado de prioridad.incluir?(s) } si clúster.¿Soltero/a? servidor elsif clúster.particionado? servidor elsif clúster.replica_set? select_in_replica_set(servidor) else # Clúster desconocido - sin servidores [] end end |
#inspect ⇒ String
Inspecciona el selector de servidor.
116 117 118 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 116 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.
99 100 101 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 99 def umbral_local @local_threshold ||= [:local_threshold] || ServerSelector::UMBRAL_LOCAL end |
#local_threshold_with_cluster(clúster) ⇒ 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.
104 105 106 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 104 def local_threshold_with_cluster(clúster) [:local_threshold] || clúster.[:local_threshold] || 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 la sesión está dada y tiene un servidor fijado, este servidor es el único considerado para la selección. Si el servidor es de tipo mongos, se devuelve inmediatamente; de lo contrario, se inician comprobaciones de supervisión en este servidor para actualizar su estado, y si el servidor se convierte en un mongos dentro del tiempo de espera de selección de servidor, 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.
176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 176 def select_server( clúster, ping = nulo, sesión = nulo, escribir_agrupacion: false, con menor prioridad: [], timeout: nulo ) select_server_impl(clúster, ping, sesión, escribir_agregación, rebajado de prioridad, 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.
83 84 85 86 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 83 def server_selection_timeout @server_selection_timeout ||= [:server_selection_timeout] || ServerSelector::SERVER_SELECTION_TIMEOUT end |
#servicios_apropiados(clúster, anulados = []) ⇒ arreglo<Servidor>
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 servidores que cumplan con el selector de servidores del clúster.
409 410 411 412 413 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 409 def servidores_adecuados(clúster, rebajado de prioridad = []) Resultado = adecuado_servidores_impl(clúster, rebajado de prioridad) Resultado = adecuado_servidores_impl(clúster, []) si Resultado.¿vacío? && rebajado de prioridad.any? Resultado end |
#try_select_server(cluster, write_aggregation: false, deprioritized: []) ⇒ Servidor | 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.
Intenta encontrar un servidor adecuado, devuelve el servidor si hay uno disponible o nil si no hay un servidor adecuado.
337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 |
# Archivo 'lib/mongo/server_selector/base.rb', línea 337 def try_select_server(clúster, escribir_agrupacion: false, con menor prioridad: []) servidor = si escribir_agregación && clúster.replica_set? # 1. Verifique si TODOS los servidores en el clúster admiten guardado secundario. is_write_supported = clúster.servidor.disminuir(true) hacer |res, Server| res && Server.Funcionalidades.merge_out_on_secondary_enabled? end si is_write_supported # 2. Si todos los servidores admiten escrituras secundarias, respetamos la preferencia de lectura. servidores_adecuados(clúster, rebajado de prioridad) else # 3. De lo contrario, recurrimos al primario para el set de réplicas. [ clúster.servidor.detectar(&primario/a?) ] end else servidores_adecuados(clúster, rebajado de prioridad) 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(servidor) si Server && Lint.¿habilitado? && Server.average_round_trip_time.nil? # 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. propagar Error::LintError, "Servidor #{servidor.dirección} tiene rtt promedio nulo" end Server end |