Clase: Mongo::Retryable::ReadWorker Privada

Hereda:
Trabajador de base Mostrar todo
Definido en:
lib/mongo/retryable/read_worker.rb

Overview

Esta clase forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Implementa la lógica relacionada con reintentos en operaciones de lectura.

Desde:

  • 2.19.0

Resumen de atributos de instancia

Atributos heredados de BaseWorker

#reintentable

Colapso del resumen del método de instancia

Métodos heredados de BaseWorker

#inicializar

Detalles del constructor

Esta clase hereda un constructor de Mongo::Retryable::BaseWorker

Detalles del método de instancia

#lectura_con_un_reintentar(opciones = nula) {... } ⇒ Resultado

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Esto solo vuelve a intentar operaciones de lectura en caso de errores de socket.

Ejecutar una operación de lectura con un solo reintento en caso de errores de red.

El controlador utiliza este método para algunas operaciones internas de mantenimiento. Las lecturas solicitadas por la aplicación deben usar read_with_retry en lugar de este método.

Ejemplos:

Ejecutar la lectura.

read_with_one_retry do
  ...
end

Parámetros:

  • opciones (Hash | nulo) (predeterminado: nulo)

    Opciones.

Opciones Hash(opciones):

  • :retry_message (Cadena)

    Mensaje a registrar al volver a intentarlo.

Rendimientos:

  • Llama al bloque proporcionado sin argumentos

Devuelve:

  • (Result)

    El resultado de la operación.

Desde:

  • 2.2.6



153
154
155
156
157
158
159
160
161
# Archivo 'lib/mongo/retryable/read_worker.rb', línea 153

def lectura_con_un_reintento(opciones = nulo)
  rendimiento
rescate *retryable_exceptions, Error::PoolError => e
  propagar e a no ser que e.¿Escritura_reintentable?

  retry_message = opciones && opciones[:retry_message]
  reintento de registro(e, Mensaje: retry_message)
  rendimiento
end

#read_with_retry(session = nil, server_selector = nil, context = nil, &block) ⇒ Resultado

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Ejecutar una operación de lectura con reintento.

Este método selecciona el servidor para el selector especificado y cede el paso al bloque proporcionado, que debe ejecutar la consulta inicial y devolver su resultado. El bloque recibirá el servidor seleccionado para la operación. Si el bloque genera una excepción, que corresponde a un error de lectura reintentable, y los reintentos de lectura están habilitados para el cliente, este método volverá a seleccionar el servidor y cede el paso al bloque (posiblemente con un servidor diferente). Si el bloque se ejecuta correctamente, se devuelve el resultado.

Si las lecturas de reintento modernas están activadas (predeterminado), la lectura inicial se reintentará una vez. Si las lecturas de reintento tradicionales están activadas, la lectura inicial se reintentará cero o más veces, según la configuración del cliente :max_read_retries, cuyo valor predeterminado es 1. Para deshabilitar las lecturas de reintento modernas, desactívelas configurando retry_reads: false y estableciendo :max_read_retries en 0 en el cliente.

Ejemplos:

Ejecutar la lectura.

read_with_retry(session, server_selector) do |server|
  ...
end

Parámetros:

  • sesión (Mongo::Sesión | nulo) (predeterminado: nulo)

    La sesión en la que se ejecuta la operación.

  • selector de servidor (Mongo::ServerSelector::Selectable | nulo) (predeterminado: nulo)

    Selector de servidor para la operación.

  • context (Mongo::Operación::Contexto | nulo) (predeterminado: nulo)

    Contexto para la operación de lectura.

  • bloque (Procedimiento)

    El bloque a ejecutar.

Devuelve:

  • (Result)

    El resultado de la operación.

Desde:

  • 2.19.0



117
118
119
120
121
122
123
124
125
126
127
# Archivo 'lib/mongo/retryable/read_worker.rb', línea 117

def lectura_con_reintentar(sesión = nulo, selector de servidor = nulo, context = nulo, Ybloque)
  Si sesión.nil? && selector de servidor.nil?
    lectura heredada obsoleta con reintento(Ybloque)
  elsif sesión&.retry_reads?
    lectura moderna con reintento(sesión, selector de servidor, context, Ybloque)
  elsif Cliente.max_read_retries > 0
    lectura heredada con reintento(sesión, selector de servidor, context, Ybloque)
  else
    leer_sin_reintentar(sesión, selector de servidor, Ybloque)
  end
end

#read_with_retry_cursor(sesión, selector_de_servidor, vista, contexto: nulo, &bloque) ⇒ Cursor

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Ejecutar una operación de lectura devolviendo un cursor con reintento.

Este método selecciona el servidor para el selector especificado y cede el paso al bloque proporcionado, que debe ejecutar la consulta inicial y devolver su resultado. El bloque recibirá el servidor seleccionado para la operación. Si el bloque genera una excepción, que corresponde a un error de lectura reintentable, y los reintentos de lectura están habilitados para el cliente, este método volverá a seleccionar el servidor y cede el paso al bloque (posiblemente con un servidor diferente). Si el bloque se devuelve correctamente, su resultado (que debe ser un objeto Mongo::Operation::Result) se utiliza para construir un objeto Mongo::Cursor para el conjunto de resultados. A continuación, se devuelve el cursor.

Si las lecturas de reintento modernas están activadas (predeterminado), la lectura inicial se reintentará una vez. Si las lecturas de reintento tradicionales están activadas, la lectura inicial se reintentará cero o más veces, según la configuración del cliente :max_read_retries, cuyo valor predeterminado es 1. Para deshabilitar las lecturas de reintento modernas, desactívelas configurando retry_reads: false y estableciendo :max_read_retries en 0 en el cliente.

Ejemplos:

Ejecutar una lectura devolviendo un cursor.

cursor = read_with_retry_cursor(session, server_selector, view) do |server|
  # return a Mongo::Operation::Result
  ...
end

Parámetros:

  • sesión (Mongo::Sesión)

    La sesión en la que se ejecuta la operación.

  • selector de servidor (Mongo::ServerSelector::Seleccionable)

    Selector de servidor para la operación.

  • vista (CollectionView)

    El CollectionView que define la consulta.

  • context (Operación::Contexto | nil) (predeterminado: nulo)

    El contexto de operación a utilizar con el cursor.

  • bloque (Procedimiento)

    El bloque a ejecutar.

Devuelve:

  • (Cursor)

    El cursor para el conjunto de resultados.

Desde:

  • 2.19.0



68
69
70
71
72
73
74
75
76
77
78
79
80
# Archivo 'lib/mongo/retryable/read_worker.rb', línea 68

def lectura con cursor de reintento(sesión, selector de servidor, vista, context: nulo, Ybloque)
  lectura_con_reintentar(sesión, selector de servidor, context) hacer |Server|
    resultado = rendimiento Server

    # RUBY-2367: Esto se actualizará para permitir que el caché de consultas
    # cursores de caché con resultados de múltiples lotes.
    Si Caché de consultas.¿activado? && !vista.Colección.¿colección_del_sistema?
      Cursor de almacenamiento en caché.Nuevo(vista, resultado, Server, sesión: sesión, context: context)
    else
      Cursor.Nuevo(vista, resultado, Server, sesión: sesión, context: context)
    end
  end
end