Clase: Mongo::ServerSelector::Base

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

Overview

Desde:

  • 2.0.0

Resumen de atributos de la instancia colapsar

Resumen del método de instancia colapsar

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.

Ejemplos:

Inicializa el selector.

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

Inicializar la preferencia sin opciones.

Mongo::ServerSelector::Secondary.new

Parámetros:

  • opciones (encriptada) (valor por defecto: nil)

    Las opciones de preferencia del servidor.

Opciones Hash (options):

  • :local_threshold (Integer)

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

  • max_staleness (Integer)

    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



45
46
47
48
49
50
51
52
53
54
# Archivo 'lib/mongo/server_selector/base.rb', línea 45

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

  validate!
end

Detalles de atributo de instancias

#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



70
71
72
# Archivo 'lib/mongo/server_selector/base.rb', línea 70

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



66
67
68
# Archivo 'lib/mongo/server_selector/base.rb', línea 66

def max_staleness
  @max_staleness
end

#opcionesHash (solo lectura)

Devuelve opciones Las opciones.

Devuelve:

  • (encriptada)

    opciones Las opciones.

Desde:

  • 2.0.0



57
58
59
# Archivo 'lib/mongo/server_selector/base.rb', línea 57

def opciones
  @options
end

#tag_setsarreglo (solo lectura)

Devuelve tag_sets Los conjuntos de etiquetas utilizados para seleccionar servidores.

Devuelve:

  • (arreglo)

    Conjuntos de etiquetas Los conjuntos de etiquetas utilizados para seleccionar servidores.

Desde:

  • 2.0.0



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.

Ejemplos:

Compruebe la igualdad de los selectores de servidor.

preference == other

Parámetros:

  • Otros (objeto)

    La otra preferencia.

Devuelve:

  • (true, false)

    Si los objetos son iguales.

Desde:

  • 2.0.0



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.

Parámetros:

  • clúster (clúster)

    El clúster.

  • rebajado de prioridad (Array<servidor>) (valor por defecto: [])

    Una lista de servidores que solo debe seleccionarse si no hay otros servidores disponibles.

Devuelve:

  • (Array<servidor>)

    Los servidores candidatos.

Desde:

  • 2.0.0



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

#inspectString

Inspecciona el selector de servidor.

Ejemplos:

Inspecciona el selector de servidor.

selector.inspect

Devuelve:

  • (string)

    La inspección.

Desde:

  • 2.2.0



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



99
100
101
# Archivo 'lib/mongo/server_selector/base.rb', línea 99

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

Desde:

  • 2.0.0



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

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

Parámetros:

  • clúster (Mongo::clúster)

    El clúster del que seleccionar un servidor elegible.

  • ping (verdadero, falso) (valor por defecto: nil)

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

  • sesión (Session | nil) (valor por defecto: nil)

    Sesión opcional para tener en cuenta el pinning de mongos.

  • escribir_agregación (true | false) (por defecto: false)

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

  • rebajado de prioridad (Array<servidor>) (valor por defecto: [])

    Una lista de servidores que solo debe seleccionarse si no hay otros servidores disponibles.

  • :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 ha detectado una condición inesperada y el modo lint está activado.

Desde:

  • 2.0.0



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_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 para la selección del servidor, en segundos.

selector.server_selection_timeout

Devuelve:

  • (Float)

    El tiempo de espera.

Desde:

  • 2.0.0



83
84
85
86
# Archivo 'lib/mongo/server_selector/base.rb', línea 83

def server_selection_timeout
  @server_selection_timeout ||=
    opciones[: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.

Parámetros:

  • clúster (clúster)

    El clúster.

  • rebajado de prioridad (Array<servidor>) (valor por defecto: [])

    Una lista de servidores que solo debe seleccionarse si no hay otros servidores disponibles.

Devuelve:

  • (Array<servidor>)

    Los servidores adecuados.

Desde:

  • 2.0.0



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.

Parámetros:

  • clúster (Mongo::clúster)

    El clúster del que seleccionar un servidor elegible.

  • escribir_agregación (true | false) (por defecto: false)

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

  • rebajado de prioridad (Array<servidor>) (valor por defecto: [])

    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



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