Gestione delle operazioni di rollback

Un gestore di risorse, un client transazionale o KTM può eseguire il rollback di una transazione se determina che la transazione non deve essere sottoposta a commit (in genere perché è stato rilevato un errore).

Per eseguire il rollback di una transazione, un gestore di risorse può chiamare ZwRollbackEnlistment. Dopo che il gestore risorse ha chiamato ZwCreateEnlistment per l'integrazione in una transazione, può eseguire il rollback della transazione in qualsiasi momento prima di chiamare ZwPrepareComplete.

I client transazionali possono eseguire il rollback delle transazioni chiamando ZwRollbackTransaction. Dopo che un client transazionale ha chiamato ZwCreateTransaction per creare una transazione, può eseguire il rollback della transazione in qualsiasi momento prima di chiamare ZwCommitTransaction.

Inoltre, un client transazionale può impostare un valore di timeout per una transazione chiamando ZwSetInformationTransaction. KTM esegue il rollback della transazione se non è stato eseguito il commit per il periodo di tempo specificato.

Quando viene effettuata una chiamata a ZwRollbackEnlistment o ZwRollbackTransaction o quando viene superato un valore di timeout, KTM invia una notifica di TRANSACTION_NOTIFY_ROLLBACK a tutti i gestori risorse.

Quando ogni resource manager riceve una notifica di TRANSACTION_NOTIFY_ROLLBACK, deve eseguire le operazioni seguenti:

  1. Ripristinare i dati della transazione nello stato in cui si trovava prima dell'integrazione di Resource Manager nella transazione.

    In genere, un gestore risorse ripristina i dati della transazione copiando i dati iniziali salvati della transazione dal flusso di log alla risorsa di archiviazione pubblica e permanente del database. Per altre informazioni sull'uso dei flussi di log, vedere Uso di flussi di log con KTM.

  2. Chiama ZwRollbackComplete.

Dopo aver chiamato ZwRollbackComplete, il gestore delle risorse deve chiamare ZwClose per chiudere l'handle di integrazione.

Se un gestore risorse ha avviato l'operazione di rollback, deve usare l'interfaccia client per informare il client che la transazione non è riuscita.