Las escrituras reintentables permiten que los controladores vuelvan a intentar operaciones de escritura específicas una vez después de errores de red o si no pueden encontrar una red en buen estado. principal en el conjunto de réplicas oclúster fragmentado.
Compatibilidad
Las escrituras reintentables requieren:
- Topologías de implementación
- Un set de réplicas o un clúster. No es compatible con instancias autónomas.
- Motor de almacenamiento
- Un motor de almacenamiento con bloqueo a nivel de documento, como WiredTiger o en memoria.
- Controladores de MongoDB
Controladores compatibles con MongoDB 3.6+.
Java 3.6+
Python 3.6+
C 1.9+
Go 1.8+
C# 2.5+
Node 3.0+
Ruby 2.5+
Rust 2.1+
Swift 1.2+
Perl 2.0+
PHPC 1.4+
Scala 2.2+
C++ 3.6.6+
- Versión de MongoDB
- MongoDB 3.6+ y
featureCompatibilityVersion3.6+ en todos los nodos.setFeatureCompatibilityVersionVer. - Guardar reconocimiento
- Las escrituras con preocupación de escritura
0no se pueden reintentar.
Comportamientos
Escrituras reintentables y transacciones multi-documento
Las operaciones de confirmación y abortar transacciones se pueden reintentar. Los controladores reintentan estas operaciones una vez si ocurre un error, incluso si retryWrites está false.
Las escrituras dentro de una transacción no son individualmente reintentables, independientemente del valor de retryWrites.
Para obtener más información sobre las transacciones, consulta Transacciones.
Activar las escrituras reintentables
- Controladores de MongoDB
- Los controladores compatibles con MongoDB 4.2 y superiores permiten
Escrituras reintentables por defecto. Los controladores anteriores requieren la
retryWrites=trueopción. La opción puede omitirse en aplicaciones que usan controladores compatibles conretryWrites=trueMongoDB,4 2 y versiones posteriores.Para desactivar las escrituras reintentables, las aplicaciones que utilizan controladores compatibles con MongoDB 4.2 y versiones posteriores deben incluirretryWrites=falseen la cadena de conexión. mongoshmongoshhabilita las escrituras reintentables de forma predeterminada. Para deshabilitarlas,--retryWrites=falseuse:mongosh --retryWrites=false
Operaciones de escritura reintentable
MongoDB reintenta estas operaciones si tienen el nivel de confirmación de escritura (write concern) confirmado:
Nota
Las escrituras dentro de transacciones no son individualmente reintentables.
Métodos | Descripciones |
|---|---|
Inserts | |
Actualizaciones de un solo documento | |
Eliminaciones de un solo documento | |
| |
| Operaciones de guardado masiva que solo consisten en operaciones de guardado de un solo documento. Una operación masiva que se puede reintentar puede incluir cualquier combinación de las operaciones de guardado especificadas, pero no puede incluir ninguna operación de guardado de múltiples documentos, como |
| Operaciones de guardado masiva que solo consisten en operaciones de guardado de un solo documento. Una operación masiva que se puede reintentar puede incluir cualquier combinación de las operaciones de guardado especificadas, pero no puede incluir ninguna operación de guardado de múltiples documentos, como |
Errores persistentes de red
MongoDB reintenta las escrituras una vez. Esto soluciona errores de red transitorios y elecciones de conjuntos de réplicas, pero no errores de red persistentes.
Período de conmutación por error
Los controladores esperan serverSelectionTimeoutMS para encontrar un nuevo servidor principal antes de reintentar. Las escrituras reintentables fallan si la conmutación por error tarda más de este tiempo de espera.
Advertencia
Si un cliente no responde durante más localLogicalSessionTimeoutMinutes de, la escritura podría volver a intentarse y aplicarse nuevamente cuando el cliente se recupere.
Diagnósticos
serverStatus incluye estadísticas de escritura reintentables en la transactions sección.
Escrituras reintentables local en la base de datos
Los controladores oficiales habilitan las escrituras reintentables de forma predeterminada. Las escrituras en la local base de datos fallan a menos que se deshabiliten.
Para deshabilitarlo, configure en la retryWrites=false cadenade conexión.
Error Handling
A partir de MongoDB 6.1, si tanto el primer como el segundo intento de una escritura reintentable fallan sin que se realice ni una sola escritura, MongoDB devuelve un error con la etiqueta NoWritesPerformed.
La etiqueta NoWritesPerformed diferencia los resultados de operaciones de agrupación como insertMany(). En una operación insertMany, puede ocurrir uno de los siguientes resultados:
Resultado | Salida de MongoDB |
|---|---|
No se han insertado documentos. | Error devuelto con la etiqueta |
Trabajo parcial completado. (Se ha insertado al menos un documento, pero no todos.) | Error devuelto sin la etiqueta |
Se insertan todos los documentos. | Éxito devuelto. |
Las aplicaciones pueden utilizar la etiqueta NoWritesPerformed para determinar de manera definitiva que no se insertaron documentos. Este reporte de errores permite que la aplicación mantenga un estado preciso de la base de datos al manejar escrituras reintentables.
En versiones anteriores de MongoDB, se devuelve un error cuando fallan tanto el primer como el segundo intento de una escritura reintentable. Sin embargo, no se hace ninguna distinción para indicar que no se realizaron las escrituras.