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