Clase: Mongo::ServerSelector::Base

Hereda:
Objeto
  • Objeto
Mostrar todo
Definido en:
lib/mongo/server_selector/base.rb

Overview

Desde:

  • 2.0.0

Subclases conocidas directas

Más cercano, Principal, Primario preferido, Secundario, Secundario preferido

Resumen de atributos de la instancia colapsar

Resumen del método de instancia colapsar

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.

Ejemplos:

Inicializa el selector.

Mongo::ServerSelector::Secondary.new(:tag_sets => [{'dc' => 'nyc'}])

Inicializar la preferencia sin opciones.

Mongo::ServerSelector::Secondary.new

Parámetros:

  • opciones (Hash) (predeterminado: nulo)

    Las opciones de preferencia del servidor.

Opciones Hash (options):

  • :umbral_local (Entero)

    El límite del umbral local para la selección más cercana en segundos.

  • max_staleness (Entero)

    El atraso de la replicación máximo, en segundos, que un secundario puede soportar y aún así ser elegible para una lectura. Un valor de -1 se trata de la misma manera que nil, que es no tener una obsolescencia máxima.

  • :hedge (Hash | nil)

    Un Hash que especifica si se deben habilitar lecturas protegidas en el servidor. Las lecturas protegidas (Hedged reads) no están habilitadas por defecto. Al especificar esta opción, debe estar en el formato: { enabled: true }, donde el valor de la clave :enabled es un valor booleano.

Aumenta:

Desde:

  • 2.0.0



49
50
51
52
53
54
55
56
57
58
59
60
# Archivo 'lib/mongo/server_selector/base.rb', línea 49

def inicializar(opciones = nulo)
  opciones = opciones ? opciones.dup : {}
  si opciones[max_staleness] == -1
    opciones.borrar(max_staleness)
  end
  @options = opciones
  @tag_sets = opciones[:conjuntos de etiquetas] || []
  @max_staleness = opciones[max_staleness]
  @hedge = opciones[:hedge]

  validate!
end

Detalles de los atributos de instancia

#hedgehash | nil (solo lectura)

Devuelve hedge El documento que especifica si se debe habilitar lecturas protegidas.

Devuelve:

  • (Hash | nil)

    Cobertura El documento que especifica si se habilitan las lecturas protegidas.

Desde:

  • 2.0.0



76
77
78
# Archivo 'lib/mongo/server_selector/base.rb', línea 76

def hedge
  @hedge
end

#max_stalenessInteger (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.

Devuelve:

  • (Número entero)

    max_staleness El atraso de la replicación máximo, en segundos, que puede presentarse en un secundario y que aún lo haga elegible para una lectura.

Desde:

  • 2.4.0



72
73
74
# Archivo 'lib/mongo/server_selector/base.rb', línea 72

def max_staleness
  @max_staleness
end

#opcionesHash (solo lectura)

Devuelve opciones Las opciones.

Devuelve:

  • (encriptada)

    opciones Las opciones.

Desde:

  • 2.0.0



63
64
65
# Archivo 'lib/mongo/server_selector/base.rb', línea 63

def opciones
  @options
end

#tag_setsarreglo (solo lectura)

Devuelve tag_sets Los conjuntos de etiquetas utilizados para seleccionar servidores.

Devuelve:

  • (arreglo)

    tag_sets Los conjuntos de etiquetas utilizados para seleccionar servidores.

Desde:

  • 2.0.0



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.

Ejemplos:

Compruebe la igualdad de los selectores de servidor.

preference == other

Parámetros:

  • Otros (objeto)

    La otra preferencia.

Devuelve:

  • (verdadero,falso)

    Si los objetos son iguales.

Desde:

  • 2.0.0



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.

Parámetros:

Devuelve:

  • (Array)

    Los servidores candidatos.

Desde:

  • 2.0.0



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

#inspectString

Inspeccione el selector de servidor.

Ejemplos:

Inspeccione el selector de servidor.

selector.inspect

Devuelve:

  • (string)

    La inspección.

Desde:

  • 2.2.0



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_thresholdFloat

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.

Obtenga el límite del umbral local para la selección más cercana en segundos.

Ejemplos:

Obtenga el umbral local.

selector.local_threshold

Devuelve:

  • (Float)

    El umbral local.

Desde:

  • 2.0.0



105
106
107
# Archivo 'lib/mongo/server_selector/base.rb', línea 105

def umbral_local
  @local_threshold ||= (opciones[: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.

Desde:

  • 2.0.0



110
111
112
# Archivo 'lib/mongo/server_selector/base.rb', línea 110

def local_threshold_with_cluster(clúster)
  opciones[:umbral_local] || clúster.opciones[: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.

Parámetros:

  • clúster (Mongo::Cluster)

    El clúster del que seleccionar un servidor elegible.

  • ping (verdadero, falso) (predeterminado: nulo)

    Indica si se realiza un ping al servidor antes de la selección. Obsoleto e ignorado.

  • sesión (Session | nil) (predeterminado: nulo)

    Sesión opcional a considerar para la fijación de mongos. Añadido en la versión 2.10.0.

  • agregación_de_escritura (true | false) (por defecto: false)

    Si necesitamos un servidor que admita la escritura de agregaciones (por ejemplo, con $merge/$out) en los secundarios.

  • despriorizado (Matriz) (predeterminado: [])

    Una lista de servidores que se deben seleccionar solo si no hay otros servidores disponibles. Esto se usa para evitar seleccionar el mismo servidor dos veces seguidas al reintentar un comando.

  • :timeout (Float | nil)

    Tiempo de espera en segundos para la operación, si existen.

Devuelve:

  • (Mongo::servidor)  —

    Un servidor que coincida con la preferencia del servidor.

Aumenta:

  • (Error::NoServerAvailable)

    No se encontró ningún servidor que cumpla con la preferencia especificada o el requisito de fijación dentro del tiempo de espera de selección del servidor.

  • (Error::LintError)

    Se detectó una condición inesperada y se habilitó el modo de pelusa.

Desde:

  • 2.0.0



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_fueraFlotante

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.

Obtener el tiempo de espera para la selección del servidor.

Ejemplos:

Obtenga el tiempo de espera de selección del servidor, en segundos.

selector.server_selection_timeout

Devuelve:

  • (Float)

    El tiempo de espera.

Desde:

  • 2.0.0



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 ||=
    (opciones[: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.

Parámetros:

Devuelve:

  • (Array)

    Los servidores adecuados.

Desde:

  • 2.0.0



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.

Parámetros:

  • clúster (Mongo::Cluster)

    El clúster del que seleccionar un servidor elegible.

  • agregación_de_escritura (true | false) (por defecto: false)

    Si necesitamos un servidor que admita la escritura de agregaciones (por ejemplo, con $merge/$out) en los secundarios.

  • despriorizado (Matriz) (predeterminado: [])

    Una lista de servidores que se deben seleccionar solo si no hay otros servidores disponibles. Esto se usa para evitar seleccionar el mismo servidor dos veces seguidas al reintentar un comando.

Devuelve:

  • (Server | nil)

    Un servidor adecuado, si existe.

Desde:

  • 2.0.0



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