Sdílet prostřednictvím


Oznámení o transakcích

KTM poskytuje frontu oznámení pro každého správce prostředků. KTM doručuje oznámení správci prostředků umístěním do fronty správce prostředků.

Správce prostředků může načítat oznámení z fronty synchronně nebo asynchronně.

  • Pokud chcete načíst oznámení synchronně, správce prostředků může opakovaně volat ZwGetNotificationResourceManager.

  • Pokud chcete dostávat oznámení asynchronně, správce prostředků může volat TmEnableCallbacks k nastavení rutiny zpětného volání. KTM volá rutinu zpětného volání pokaždé, když do fronty správce prostředků vloží oznámení.

Když správce prostředků zavolá ZwCreateEnlistment k vytvoření zařazení pro transakci, správce prostředků určuje typy oznámení, které by měla přijmout. Správci prostředků dostanou jenom oznámení, k jejichž příjmu se zaregistrují.

Konstanty oznámení jsou definovány v Ktmtypes.h. Názvy konstant oznámení mají formát TRANSACTION_NOTIFY_Xxx.

Zbytek tohoto tématu obsahuje všechny konstanty oznámení, které Ktmtypes.h definuje a rozdělí do tří skupin:

  • Oznámení, která můžou dostávat správci prostředků

  • Oznámení, která můžou přijímat nadřízení správci transakcí

  • Konstanty oznámení, které jsou definovány, ale aktuálně se nepoužívají

Oznámení pro správce prostředků

Všichni správci prostředků se musí zaregistrovat, aby dostávali oznámení TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE a TRANSACTION_NOTIFY_COMMIT, i když následně volají ZwReadOnlyEnlistment, aby zařazení označili jako pouze pro čtení.

Správci prostředků můžou podporovat TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, ale musí také podporovat oznámení pro vícestupňovou předběžnou přípravu, přípravu a potvrzení.

Následující seznam obsahuje všechna oznámení, která můžou správci prostředků přijímat:

TRANSACTION_NOTIFY_PREPREPARE
Při odeslání: Klient volá ZwCommitTransaction a žádný správce prostředků nepodporuje jednofázové potvrzení nebo pokud nadřazený správce transakcí volá ZwPrePrepareEnlistment.

Přijal: Správci zdrojů.

Požadovaná akce příjemce: Proveďte předběžné operace přípravy a potom volejte ZwPrePrepareComplete. (Další informace o operacích předběžné přípravy najdete v tématu Zpracování operací potvrzení.)

Omezení: Správce prostředků musí také podporovat TRANSACTION_NOTIFY_PREPARE a TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_PREPARE
Při odeslání: Po TRANSACTION_NOTIFY_PREPREPARE pokud klient volá ZwCommitTransaction a žádný správce prostředků nepodporuje jednofázové potvrzení nebo pokud nadřazený správce transakcí volá ZwPrepareEnlistment.

Přijal: Správci zdrojů.

Požadovaná akce příjemce: Proveďte operace přípravy a pak volejte ZwPrepareComplete. (Další informace o operacích potvrzení najdete v tématu Zpracování operací potvrzení.)

Omezení: Správce prostředků musí také podporovat TRANSACTION_NOTIFY_PREPREPARE a TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_COMMIT
Při odeslání: Po TRANSACTION_NOTIFY_PREPARE pokud klient volá ZwCommitTransaction a žádný správce prostředků nepodporuje jednofázové potvrzení nebo pokud nadřazený správce transakcí volá ZwCommitEnlistment.

Přijal: Správci zdrojů.

Požadovaná akce příjemce: Proveďte operace potvrzení a potom volejte ZwCommitComplete. (Další informace o operacích potvrzení naleznete v tématu Zpracování operací potvrzení.)

Omezení: Správce prostředků musí také podporovat TRANSACTION_NOTIFY_PREPREPARE a TRANSACTION_NOTIFY_PREPARE.

TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT
Při odeslání: Klient volá ZwCommitTransaction a Resource Manager podporuje operace s jednofázovým potvrzením.

Přijal: Správci zdrojů.

Požadovaná akce příjemce: Buď potvrďte transakci nebo zavolejte ZwSinglePhaseReject. (Další informace o operacích jednofázového potvrzení naleznete v tématu Zpracování operací potvrzení.)

Omezení: Správce prostředků musí také podporovat TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE a TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_ROLLBACK
Při odeslání: Klient volá ZwRollbackTransaction, nadřízený správce transakcí volá ZwRollbackEnlistment nebo KTM detekuje chybu (například neúspěšné zápis do streamu protokolu).

Přijímá: Správci prostředků i nadřízení správci transakcí.

Požadovaná akce příjemce: Proveďte všechny operace potřebné k vrácení dat transakce a volání ZwRollbackComplete. (Další informace o operacích vrácení zpět naleznete v tématu Zpracování operací vrácení zpět.)

Omezení: Všichni správci prostředků a nadřízení správci transakcí musí podporovat TRANSACTION_NOTIFY_ROLLBACK.

TRANSACTION_NOTIFY_RECOVER
Při odeslání: Správce prostředků volá ZwRecoverResourceManager.

Přijal: Správci zdrojů.

Požadovaná akce příjemce: Správce prostředků musí zavolat ZwRecoverEnlistment. (Další informace o operacích obnovení najdete v tématu Zpracování operací obnovení.)

Omezení: Žádný.

TRANSACTION_NOTIFY_LAST_RECOVER
Při odeslání: Po odeslání KTM poslední TRANSACTION_NOTIFY_RECOVER pro zařazení správce prostředků.

Přijal: Správci zdrojů.

Požadovaná akce příjemce: Ukončete operaci obnovení. (Další informace o operacích obnovení najdete v tématu Zpracování operací obnovení.)

Omezení: Žádný.

TRANSACTION_NOTIFY_INDOUBT
Při odeslání: Po té, co správce prostředků zavolá ZwRecoverEnlistment, pokud KTM nemůže určit, zda by transakce měla být potvrzena nebo zrušena (obvykle proto, že TPS má nadřízeného správce transakcí, který není k dispozici).

Přijali: Správci zdrojů.

Požadovaná akce příjemce: Nedělejte nic, dokud KTM neodešle TRANSACTION_NOTIFY_COMMIT nebo TRANSACTION_NOTIFY_ROLLBACK.

Omezení: Žádný.

TRANSAKCE_UPOZORNĚNÍ_RM_ODPOJENO
Po odeslání: Správce prostředků, který zpracovává operaci jednofázového potvrzení, zavře popisovač zařazení, aniž by naznačil, že byla transakce potvrzena nebo vrácena zpět.

Přijato: Správci prostředků a nadřízení správci transakcí, kteří mají zařazení v transakci.

Požadovaná akce příjemce: Operace čištění specifické pro transakce. Obvykle je toto oznámení užitečné pro správce prostředků jen pro čtení.

Omezení: Žádný.

Oznámení pro nadřízené správce transakcí

Nadřízení správci transakcí můžou dostávat následující oznámení:

TRANSACTION_NOTIFY_ROLLBACK
Viz předchozí popis.

TRANSAKCE_UPOZORNĚNÍ_RM_ODPOJEN
Viz předchozí popis.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Po odeslání: Jakmile všichni správci prostředků obdrží TRANSACTION_NOTIFY_PREPREPARE a odpověděli voláním ZwPrePrepareComplete.

Přijato od: Vyšší správci transakcí.

Požadovaná akce příjemce: Nadřízený správce transakcí by měl volat ZwPrepareEnlistment.

TRANSACTION_NOTIFY_PREPARE_COMPLETE
Při odeslání: Jakmile všichni správci prostředků obdrželi TRANSACTION_NOTIFY_PREPARE a odpověděli voláním ZwPrepareComplete.

Přijato: Přední manažeři transakcí.

Požadovaná akce příjemce: Nadřazený správce transakcí by měl volat ZwCommitEnlistment.

TRANSACTION_NOTIFY_COMMIT_COMPLETE
Při odeslání: Jakmile všichni správci prostředků obdrželi TRANSACTION_NOTIFY_COMMIT a odpověděli voláním ZwCommitComplete.

Přijato: Vynikající správci transakcí.

Požadovaná akce příjemce: Operace čištění transakcí

Notifikace transakce o dokončení vrácení zpět
Po odeslání: Jakmile všichni správci prostředků obdrželi TRANSACTION_NOTIFY_ROLLBACK a odpověděli voláním ZwRollbackComplete.

Přijato: Vynikající správci transakcí.

Požadovaná akce příjemce: Operace čištění transakcí

TRANSACTION_NOTIFY_RECOVER_QUERY
Při odeslání: Nadřízený správce transakcí volá ZwRecoverResourceManager.

Přijato od: špičkových správců transakcí.

Požadovaná akce příjemce: Nadřazený správce transakcí musí zavolat buď ZwCommitEnlistment nebo ZwRollbackEnlistment pro zařazení.

TRANSACTION_NOTIFY_COMMIT_REQUEST
Při odeslání: Klient volá ZwCommitTransaction. Pokud správce nadřízených transakcí zaregistroval toto oznámení pro zařazení, KTM odešle TRANSACTION_NOTIFY_COMMIT_REQUEST nadřízenému správci transakcí místo odesílání TRANSACTION_NOTIFY_COMMIT správcům prostředků.

Přijato od: Nadřazení správci transakcí.

Požadovaná akce příjemce: Nadřízený správce transakcí volá ZwCommitEnlistment.

VÝSLEDEK_UPOZORNĚNÍ_NA_TRANSAKCI
Při odeslání: Správce prostředků volá TmRequestOutcomeEnlistment , zatímco transakce je v připraveném stavu.

Přijato: Vynikající správci transakcí.

Požadovaná akce příjemce: Nadřazený správce transakcí musí volat ZwCommitEnlistment nebo ZwRollbackEnlistment.

Nepoužitá oznámení

Následující oznámení jsou definována v Ktmtypes.h, ale KTM je v současné době nepodporuje:

TRANSACTION_NOTIFY_DELEGATE_COMMIT

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

TRANSAKCE_UPOZORNĚNÍ_MARŠÁLOVÁNÍ

TRANSACTION_NOTIFY_PROMOTE

TRANSAKCE_UPOZORNĚNÍ_PROPAKOVAT_NOVÉ

Transakce_Upozornění_Propagace_Stažení

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

TRANSACTION_NOTIFY_COMMIT_FINALIZE