Docs Menu
Docs Home
/ /

Limite el tiempo de ejecución del servidor

En esta guía, podrá aprender a utilizar el timeout_ms Opción para establecer un tiempo de espera para las operaciones del servidor.

Al usar el controlador Ruby para realizar una operación de servidor, puede limitar el tiempo que el servidor tarda en finalizarla. Para ello, especifique un tiempo de espera de operación del lado del cliente (CSOT). Este tiempo de espera se aplica a todos los pasos necesarios para completar la operación, incluyendo la selección del servidor, la verificación de la conexión y la ejecución del servidor. Si el tiempo de espera expira antes de que se complete la operación, el controlador Ruby genera una excepción de tiempo de espera.

Para especificar un tiempo de espera al conectarse a una implementación de MongoDB, configure la opción de conexión timeout_ms con la duración del tiempo de espera en milisegundos. Puede especificar un valor de tiempo de espera de las siguientes maneras:

  • Pase la opción de cliente timeout_ms al constructor Mongo::Client.

  • Pase la opción de cadena de conexión timeoutMS como parámetro a su cadena de conexión.

Seleccione una de las siguientes pestañas para ver ejemplos de cómo utilizar la opción de cliente timeout_ms o la opción de cadena de conexión timeoutMS para especificar un tiempo de espera de 30 segundos:

uri = "<connection string>"
options = { timeout_ms: 30000 }
client = Mongo::Client.new(uri, options)
uri = "mongodb://<hostname>:<port>?timeoutMS=30000"
client = Mongo::Client.new(uri)

Si especifica la opción timeout_ms, el controlador aplica automáticamente el tiempo de espera especificado para cada operación del servidor.

Nota

La opción de conexión timeout_ms unifica la mayoría de las opciones relacionadas con el tiempo de espera. Las siguientes opciones de tiempo de espera están obsoletas:

  • socket_timeout

  • wait_queue_timeout

  • wtimeout

  • max_time_ms

  • max_commit_time_ms

La opción de conexión timeout_ms tiene prioridad sobre estas opciones de tiempo de espera obsoletas.

Al especificar una opción timeout_ms, el controlador aplica el tiempo de espera según los mismos comportamientos de herencia que las demás opciones del controlador Ruby. La siguiente tabla describe cómo se hereda el valor del tiempo de espera en cada nivel:

Nivel
Descripción de la herencia

Operación

Toma la máxima prioridad y anula las timeout_ms opciones establecidas en cualquier otro nivel.

Transacción

Tiene prioridad sobre timeout_ms establecido en el nivel de sesión, colección, base de datos o cliente.

Sesión

Se aplica a todas las transacciones y operaciones dentro de esa sesión, a menos que la opción sea anulada por las opciones establecidas en esos niveles.

Database

Se aplica a todas las sesiones y operaciones dentro de esa base de datos, a menos que la opción sea anulada por las opciones establecidas en esos niveles.

Colección

Se aplica a todas las sesiones y operaciones de esa colección, a menos que la opción sea anulada por las opciones establecidas en esos niveles.

Cliente

Se aplica a todas las bases de datos, colecciones, sesiones, transacciones y operaciones dentro de ese cliente que no especifiquen timeout_ms.

Para obtener más información sobre cómo anular la opción de tiempo de espera y configurar otras opciones, consulte lo siguiente Secciónde anulaciones.

Puede especificar una opción timeout_ms a nivel de operación para anular la configuración a nivel de cliente para una operación específica. Esto le permite personalizar los tiempos de espera según las necesidades de cada consulta.

El siguiente ejemplo demuestra cómo una configuración de nivel de operación timeout_ms puede anular una configuración de nivel de cliente timeout_ms:

require 'mongo'
# Replace the placeholder with your connection string
uri = "<connection string>"
# Sets a client-level timeout configuration
options = { timeout_ms: 30000 }
Mongo::Client.new(uri, options) do |client|
db = client.use('test-db')
collection = db[:test-collection]
# Performs a query with an operation-level timeout configuration,
# overriding the client-level configuration
docs = collection.find({}, timeout_ms: 10000).to_a
docs.each { |doc| puts doc }
end

Puede establecer un tiempo de espera para las transacciones utilizando la opción de cliente default_timeout_ms.

Cuando crea una nueva instancia Mongo::Session para implementar una transacción, puede configurar la opción de cliente default_timeout_ms para especificar los valores timeout_ms para los siguientes métodos:

Si no especifica default_timeout_ms, el controlador utiliza el valor timeout_ms establecido en el padre Mongo::Client.

No se puede anular el valor timeout_ms de Mongo::Client para una llamada a start_session.

Solo puede establecer un valor de tiempo de espera para el método start_transaction utilizando la timeout_ms opción.

No se puede anular default_timeout_ms configurando la opción timeout_ms en una operación en una sesión de transacción proporcionada por la devolución de llamada with_transaction, o el controlador genera un error.

Cuando se utiliza el cifrado a nivel de campo del lado del cliente (CSFLE), el controlador utiliza la opción timeout_ms para limitar el tiempo permitido para las operaciones de cifrado y descifrado.

Si especifica la opción timeout_ms al construir una instancia ClientEncryption, esta controla la duración de todas las operaciones realizadas en ella. Si no proporciona timeout_ms, la instancia hereda la configuración timeout_ms de la opción Mongo::Client utilizada en el constructor ClientEncryption.

Si configura timeout_ms tanto en el cliente como directamente en ClientEncryption, el valor proporcionado a ClientEncryption tendrá prioridad.

Los cursores ofrecen opciones de tiempo de espera configurables al usar la función CSOT. Puede ajustar el manejo del cursor configurando su duración o el modo de iteración, si es necesario. Para configurar el modo, establezca la opción timeoutMode en cursorLifetime (el valor predeterminado) o en iteration.

El modo de duración del cursor usa timeout_ms para limitar la duración total de un cursor. En este modo, la inicialización del cursor y todas las llamadas subsiguientes a sus métodos deben completarse dentro del límite especificado por la opción timeout_ms. Todos los documentos deben devolverse dentro de este límite. De lo contrario, la duración del cursor expira y se produce un error de tiempo de espera.

Cuando cierra un cursor llamando al método to_a o close, el tiempo de espera se restablece para garantizar que se limpien los recursos del lado del servidor.

El siguiente ejemplo muestra cómo configurar la opción timeout_ms para garantizar que el cursor se inicialice y todos los documentos se recuperen en 10 segundos:

docs = collection.find({}, timeout_ms:10000).to_a

El modo de iteración del cursor utiliza la opción timeout_ms para limitar cada llamada al método try_next. El tiempo de espera se actualiza tras cada llamada. Este es el modo predeterminado para todos los cursores adaptables, como los cursores adaptables devueltos por el método find en colecciones limitadas o flujos de cambios.

El siguiente ejemplo de código itera sobre los documentos de una colección de muestra mediante un cursor iterable y luego obtiene y registra la información title para cada documento de película:

cursor = collection.find()
cursor.each do |movie|
puts movie['title']
end

Para obtener más información sobre el uso de tiempos de espera con el controlador Ruby, consulte la siguiente documentación de API:

Volver

Stable API

En esta página