Manipulando operações de reversão

Um gerenciador de recursos, um cliente transacional ou KTM poderá reverter uma transação se determinar que a transação não deve ser confirmada (normalmente porque um erro foi detectado).

Para reverter uma transação, um gerenciador de recursos pode chamar ZwRollbackEnlistment. Depois que o gerenciador de recursos tiver chamado ZwCreateEnlistment para se inscrever em uma transação, ele poderá reverter a transação a qualquer momento antes de chamar ZwPrepareComplete.

Os clientes transacionais podem reverter suas transações chamando ZwRollbackTransaction. Depois que um cliente transacional tiver chamado ZwCreateTransaction para criar uma transação, ele poderá reverter a transação a qualquer momento antes de chamar ZwCommitTransaction.

Além disso, um cliente transacional pode definir um valor de tempo limite para uma transação chamando ZwSetInformationTransaction. A KTM reverterá a transação se ela não tiver sido confirmada pelo período de tempo especificado.

Quando uma chamada para ZwRollbackEnlistment ou ZwRollbackTransaction é feita ou quando um valor de tempo limite é excedido, o KTM envia uma notificação de TRANSACTION_NOTIFY_ROLLBACK para todos os gerenciadores de recursos.

Quando cada gerenciador de recursos recebe uma notificação TRANSACTION_NOTIFY_ROLLBACK, ele deve fazer o seguinte:

  1. Restaure os dados da transação para o estado em que ela estava antes do gerenciador de recursos se inscrever na transação.

    Normalmente, um gerenciador de recursos restaura os dados da transação copiando os dados iniciais salvos da transação do fluxo de log para o armazenamento público e permanente do banco de dados. Para obter mais informações sobre como usar fluxos de log, consulte Usando fluxos de log com KTM.

  2. Chame ZwRollbackComplete.

Depois de chamar ZwRollbackComplete, o gerenciador de recursos deve chamar ZwClose para fechar o identificador de inscrição.

Se um gerenciador de recursos iniciou a operação de reversão, ele deverá usar sua interface de cliente para informar ao cliente que a transação falhou.