Nuevo en la versión 1.5.
Definición
Parámetros
$session: MongoDB\Controlador\Sesión- Una sesión de cliente utilizada para ejecutar la transacción.
$callback: invocable- Una devolución de llamada que se ejecutará dentro de la transacción. Debe aceptar un objeto MongoDB\Driver\Session como primer argumento.
$transactionOptions: matriz- Opciones de transacción que se pasarán a MongoDB\Driver\Session::startTransaction. Consulta la documentación de la extensión para ver una lista de opciones compatibles.
Comportamiento
Esta función se encarga de iniciar una transacción, invocar una devolución de llamada y confirmarla. También aplica lógica para reintentar este proceso tras ciertos errores dentro de un plazo preestablecido. Se espera que la devolución de llamada ejecute una o más operaciones dentro de la transacción, pasando el argumento MongoDB\Driver\Session de la devolución de llamada como opción para dichas operaciones; sin embargo, esto no se exige.
Nota
Cualquier excepción lanzada durante la ejecución de la devolución de llamada se detectará y evaluará. Si una excepción tiene una etiqueta de error TransientTransactionError, la transacción se cancelará, se reiniciará y se volverá a invocar la devolución de llamada. Para cualquier otra excepción, la transacción se cancelará y la excepción se volverá a lanzar para propagar el error al invocador de with_transaction().
Tras la ejecución correcta de la devolución de llamada, la transacción se confirmará. Si se encuentra una excepción con la etiqueta de error UnknownTransactionCommitResult, se reintentará la confirmación. Si se encuentra una excepción con la etiqueta de error TransientTransactionError, la transacción se reiniciará y el control volverá a invocar la devolución de llamada. Cualquier otra excepción se volverá a generar para propagar el error al invocador de with_transaction().
Cuando se produce un error durante la ejecución o confirmación de una devolución de llamada, el proceso solo se reintenta si han transcurrido menos de 120 segundos desde la primera llamada a with_transaction(). Este límite de tiempo no es configurable. Transcurrido este tiempo, se volverá a generar cualquier excepción que normalmente resultaría en un reintento.
Errores/Excepciones
MongoDB\Exception\InvalidArgumentException para errores relacionados con el análisis de parámetros u opciones.
MongoDB\Driver\Exception\RuntimeException para otros errores en el nivel de extensión (por ejemplo, errores de conexión).
Ver también
Transacciones: Documentación de laAPI de controladores en el manual de MongoDB
Especificación conveniente de API para transacciones