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

Colapso delresumen de atributos de instancia

Colapso del resumen del método de instancia

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.

Ejemplos:

Inicializar el selector.

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

Inicializa la preferencia sin opciones.

Mongo::ServerSelector::Secondary.new

Parámetros:

  • opciones (Hash) (predeterminado: nulo)

    Las opciones de preferencia del servidor.

Opciones Hash(opciones):

  • :umbral_local (Entero)

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

  • :max_staleness (Entero)

    El retraso máximo de replicación, en segundos, que puede sufrir una réplica secundaria y aún ser elegible para una lectura. Un valor de -1 se trata de forma idéntica a nulo, lo que significa que no tiene una obsolescencia máxima.

  • :cobertura (Hash | nulo)

    Un hash que especifica si se habilitan las lecturas protegidas en el servidor. Las lecturas protegidas no están habilitadas por defecto. Al especificar esta opción, debe tener el formato: { enabled: true }, donde el valor de la clave :enabled es un valor booleano.

Aumentos:

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
  @opciones = opciones
  @tag_sets = opciones[:conjuntos de etiquetas] || []
  @max_staleness = opciones[:max_staleness]
  @hedge = opciones[:cobertura]

  validate!
end

Detalles de los atributos de instancia

#coberturaHash | nulo (solo lectura)

Devuelve cobertura El documento que especifica si se deben habilitar lecturas con cobertura.

Devuelve:

  • (Hash | nulo ) —

    cobertura El documento que especifica si se deben habilitar las lecturas cubiertas.

Desde:

  • 2.0.0



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

def hedge
  @hedge
end

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

Devuelve:

  • (Entero)

    max_staleness El retraso de replicación máximo, en segundos, que un secundario puede sufrir y aún ser 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:

  • (Hash)

    opciones Las opciones.

Desde:

  • 2.0.0



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

def opciones
  @opciones
end

#tag_setsMatriz (solo lectura)

Devuelve tag_sets Los conjuntos de etiquetas utilizados para seleccionar servidores.

Devuelve:

  • (Matriz)

    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 conjuntos de etiquetas
  @tag_sets
end

Detalles del método de instancia

#==(otro) ⇒ true, false

Comprobar la igualdad de dos selectores de servidor.

Ejemplos:

Verifique la igualdad del selector 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 && 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.

Parámetros:

  • clúster (Grupo) -

    El cluster.

Devuelve:

  • (Array)

    Los candidatos servidores.

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?
    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

#inspeccionarCadena

Inspeccione el selector de servidor.

Ejemplos:

Inspeccione el selector de servidor.

selector.inspect

Devuelve:

  • (Cadena) -

    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

#umbral_localFlotante

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.

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:

  • (Flotar) -

    El umbral local.

Desde:

  • 2.0.0



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

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

Desde:

  • 2.0.0



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

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

Parámetros:

  • clúster (Mongo::Cluster)

    El clúster desde el cual 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 tener en cuenta para la fijación de Mongos. Añadido en la versión 2.10.0.

  • agregación_de_escritura (true | false) (predeterminado: falso)

    Si necesitamos un servidor que admita la escritura de agregaciones (por ejemplo, con $merge/$out) en 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 la hay.

Devuelve:

  • (Mongo::Servidor)

    Un servidor que coincide con la preferencia del servidor.

Aumentos:

  • (Error::NoServerAvailable)

    No se encontró ningún servidor que coincida con la preferencia/requisito de fijación especificado en el 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,
  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_servidorFlotante

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.

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:

  • (Flotar) -

    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
  @tiempo de espera de selección de servidor ||=
    (opciones[: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.

Parámetros:

  • clúster (Grupo) -

    El cluster.

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?
    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.

Parámetros:

  • clúster (Mongo::Cluster)

    El clúster desde el cual seleccionar un servidor elegible.

  • agregación_de_escritura (true | false) (predeterminado: falso)

    Si necesitamos un servidor que admita la escritura de agregaciones (por ejemplo, con $merge/$out) en 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, 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