Nueva en la versión 1.5.
Definición
Parámetros
$session: MongoDB\Driver\Session- 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: arreglo- 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
Se recomienda encarecidamente a las aplicaciones usar una idempotentefunción de retorno, ya que puede ser invocada varias veces si se encuentran errores que se pueden volver a intentar durante la ejecución de la función de retorno o durante el compromiso.
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().
Después de la ejecución exitosa de la función de retorno, la transacción será confirmada. Si se encuentra una excepción con una etiqueta de error UnknownTransactionCommitResult, la confirmación se volverá a intentar. Si se encuentra una excepción con una etiqueta de error TransientTransactionError, la transacción se reiniciará y el control volverá a la invocación de la función de retorno. Cualquier otra excepción se volverá a lanzar para propagar el error al llamante de with_transaction().
Cuando se produce un error durante la ejecución de la función de retorno o el commit, el proceso solo se vuelve a intentar si han transcurrido menos de 120 segundos desde la primera vez que se llamó a with_transaction(). Este límite de tiempo no se puede configurar. Después de este tiempo, cualquier excepción que normalmente resultaría en un intento de reintento, en cambio, se volverá a lanzar.
Errores/Excepciones
MongoDB\Exception\InvalidArgumentException por 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: API de controladores documentación en el manual de MongoDB
Especificación conveniente de API para transacciones