MongoDB\with_transaction()
Novidade na versão 1.5.
Definição
Parâmetros
$session
: MongoDB\Driver\Session- Uma sessão de cliente usada para executar a transação.
$callback
: callable- Um retorno de chamada que será executado dentro da transação. A chamada de resposta deve aceitar um MongoDB\Driver\Session objeto como seu primeiro argumento.
$transactionOptions
: array- Opções de transação, que serão passadas para MongoDB\Driver\Session::startTransaction. Consulte a documentação da extensão para obter uma lista de opções suportadas.
Comportamento
Essa função é responsável por iniciar uma transação, invocar uma chamada de resposta e confirmar uma transação. Também se aplica lógica para tentar novamente esse processo após determinados erros dentro de um limite de tempo predefinido. Espera-se que a chamada de resposta execute uma ou mais operações dentro da transaçãopassando o MongoDB\Driver\Session da chamada de resposta argumento como uma opção para essas operações; no entanto, isso não é aplicado.
Observação
Os aplicativos são altamente encorajados a usar um idempotente chamada de resposta, pois ela pode ser invocada várias vezes se forem encontrados erros repetíveis durante a execução ou confirmação da chamada de resposta.
Qualquer exceção lançada durante a execução da chamada de resposta será detectada e avaliada. Se uma exceção tiver um rótulo de erro TransientTransactionError
, a transação será abortada, reiniciada e a chamada de resposta será invocada novamente. Para qualquer outra exceção, a transação será cancelada e a exceção será lançada novamente para propagar o erro para o chamador de with_transaction()
.
Após a execução bem-sucedida da chamada de resposta, a transação será confirmada. Se uma exceção com um rótulo de erro UnknownTransactionCommitResult for encontrada, a confirmação será repetida. Se uma exceção com uma etiqueta de erro TransientTransactionError
for encontrada, a transação será reiniciada e o controle retornará para invocar a chamada de resposta. Qualquer outra exceção será lançada novamente para propagar o erro para o chamador de with_transaction()
.
Quando ocorre um erro durante a execução ou a confirmação da chamada de resposta, o processo só é repetido se tiverem decorrido menos de 120 segundos desde que with_transaction()
foi chamado pela primeira vez. Este limite de tempo não é configurável. Após esse período, qualquer exceção que normalmente resultaria em uma tentativa de repetição será lançada novamente.
Erros/exceções
MongoDB\Exception\InvalidArgumentException
para erros relacionados à análise de parâmetros ou opções.
MongoDB\Driver\Exception\RuntimeException para outros erros no nível da extensão (por exemplo erros de conexão).
Veja também
Transações: documentação da API de drivers no manual do MongoDB
API conveniente para transações especificação