MongoDB\with_transaction()
1.5 版本中的新增功能。
定义
参数
$session
: MongoDB\Driver\Session- 用于执行事务的客户端会话。
$callback
: 可调用- 将在事务中运行的回调。 回调必须接受 MongoDB\Driver\Session 对象作为其第一个参数。
$transactionOptions
: array- 事务选项,将传递给 MongoDB\Driver\Session::startTransaction 。有关支持的选项列表,请参阅扩展文档。
行为
该函数负责启动事务、调用回调和提交事务。 在出现某些错误后,它还会应用逻辑在预设时限内重试此过程。 回调应通过传递回调的 MongoDB\Driver\Session 来执行事务中的一个或多个操作 参数作为这些操作的选项;但是,这并没有强制执行。
在执行回调期间抛出的任何异常都将被捕获并评估。 如果异常具有TransientTransactionError
错误标签,则事务将中止、重新启动,并再次调用回调。 对于任何其他异常,事务将被中止,并重新引发异常,以将错误传播给with_transaction()
的调用者。
成功执行回调后,将提交事务。 如果遇到错误标签为 UnknownTransactionCommitResult 的异常,则会重试提交。 如果遇到错误标签为TransientTransactionError
的异常,则事务将重新启动,控制权将返回以调用回调。 任何其他异常都将重新引发,以将错误传播给with_transaction()
的调用者。
当回调执行或提交期间发生错误时,仅当自首次调用with_transaction()
以来经过的时间少于 120 秒时才会重试该进程。 此时间限制不可配置。 在此时间之后,任何通常会导致重试的异常都将被重新抛出。
错误/异常
MongoDB\Exception\InvalidArgumentException
用于与参数或选项解析相关的错误。
MongoDB\ 驱动程序\Exception\RuntimeException 对于扩展级别的其他错误(例如连接错误)。