Udostępnij przez


Powiadomienia dotyczące transakcji

KTM udostępnia kolejkę powiadomień dla każdego menedżera zasobów. KTM dostarcza powiadomienia do menedżera zasobów, umieszczając je w jego kolejce.

Menedżer zasobów może pobierać powiadomienia z kolejki synchronicznie lub asynchronicznie.

  • Aby pobrać powiadomienia synchronicznie, menedżer zasobów może wielokrotnie wywoływać element ZwGetNotificationResourceManager.

  • Aby otrzymywać powiadomienia asynchronicznie, menedżer zasobów może wywołać funkcję TmEnableCallbacks w celu skonfigurowania procedury wywołania zwrotnego. KTM wywołuje procedurę wywołania zwrotnego za każdym razem, gdy umieszcza powiadomienie w kolejce menedżera zasobów.

Gdy menedżer zasobów wywołuje aplikację ZwCreateEnlistment w celu utworzenia rejestracji dla transakcji, menedżer zasobów określa typy powiadomień, które powinny zostać odebrane. Menedżerowie zasobów otrzymują tylko powiadomienia, które zarejestrują, aby otrzymywać.

Stałe powiadomień są definiowane w pliku Ktmtypes.h. Nazwy stałych powiadomień mają format TRANSACTION_NOTIFY_Xxx.

W pozostałej części tego tematu wymieniono wszystkie stałe powiadomień, które definiuje Ktmtypes.h i dzieli je na trzy grupy:

  • Powiadomienia, które mogą otrzymywać menedżerowie zasobów

  • Powiadomienia, które mogą otrzymywać nadrzędni menedżerowie transakcji

  • Stałe powiadomień, które są zdefiniowane, ale obecnie nie są używane

Powiadomienia dotyczące menedżerów zasobów

Wszyscy menedżerowie zasobów muszą zarejestrować się, aby otrzymywać powiadomienia TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE i TRANSACTION_NOTIFY_COMMIT, nawet jeśli następnie wywołają funkcję ZwReadOnlyEnlistment, aby oznaczyć uczestnictwo jako 'tylko do odczytu'.

Menedżerowie zasobów mogą obsługiwać TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, ale muszą również obsługiwać wielofazowe powiadomienia pre-przygotowawcze, przygotowawcze i zatwierdzające.

Poniższa lista zawiera wszystkie powiadomienia, które mogą otrzymywać menedżerowie zasobów:

TRANSACTION_NOTIFY_PREPREPARE
Po wysłaniu: klient wywołuje ZwCommitTransaction i brak jest menedżerów zasobów obsługujących zatwierdzanie jednofazowe, lub jeśli nadrzędny menedżer transakcji wywołuje ZwPrePrepareEnlistment.

Odebrane przez: Menedżerowie zasobów.

Wymagana akcja adresata: wykonaj operacje wstępnego przygotowania, a następnie wywołaj metodę ZwPrePrepareComplete. (Aby uzyskać więcej informacji na temat operacji przygotowywania wstępnego, zobacz Obsługa operacji zatwierdzania).

Ograniczenia: Menedżer zasobów musi również obsługiwać TRANSACTION_NOTIFY_PREPARE i TRANSACTION_NOTIFY_COMMIT.

POWIADOMIENIE_O_TRANSAKCJI_PRZYGOTOWANIE
Kiedy wysłane: Po TRANSACTION_NOTIFY_PREPREPARE, jeśli klient wywołuje ZwCommitTransaction i żaden menedżer zasobów nie obsługuje zatwierdzania jednofazowego, lub jeśli nadrzędny menedżer transakcji wywołuje ZwPrepareEnlistment.

Odebrane przez: Menedżerowie zasobów.

Wymagana akcja odbiorcy: Wykonaj operacje przygotowywania, a następnie wywołaj metodę ZwPrepareComplete. (Aby uzyskać więcej informacji na temat operacji przygotowawczych, zobacz Obsługa operacji zatwierdzania).

Ograniczenia: Menedżer zasobów musi również obsługiwać TRANSACTION_NOTIFY_PREPREPARE i TRANSACTION_NOTIFY_COMMIT.

POWIADOMIENIE_O_ZATWIERDZENIU_TRANSAKCJI
Po wysłaniu: po TRANSACTION_NOTIFY_PREPARE, jeśli klient wywołuje polecenie ZwCommitTransaction i żaden menedżer zasobów nie obsługuje zatwierdzania jednofazowego lub jeśli lepszy menedżer transakcji wywołuje ZwCommitEnlistment.

Odebrane przez: Menedżerowie zasobów.

Wymagana akcja adresata: wykonaj operacje zatwierdzania, a następnie wywołaj polecenie ZwCommitComplete. (Aby uzyskać więcej informacji na temat operacji zatwierdzania, zobacz Obsługa operacji zatwierdzania).

Ograniczenia: Menedżer zasobów musi również obsługiwać TRANSACTION_NOTIFY_PREPREPARE i TRANSACTION_NOTIFY_PREPARE.

TRANSAKCJA_POWIADOM_JEDNOFAZOWA_KOMITACJA
Gdy zostanie wysłane: klient wywołuje ZwCommitTransaction, a menedżer zasobów obsługuje operacje zatwierdzania jednofazowego.

Odebrane przez: Menedżerowie zasobów.

Wymagana akcja adresata: zatwierdź transakcję lub wywołaj metodę ZwSinglePhaseReject. (Aby uzyskać więcej informacji na temat operacji zatwierdzania jednofazowego, zobacz Obsługa operacji zatwierdzania).

Ograniczenia: Menedżer zasobów musi również obsługiwać TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE i TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_ROLLBACK
Po przesłaniu: klient wywołuje ZwRollbackTransaction, nadrzędny menedżer transakcji wywołuje ZwRollbackEnlistment lub KTM wykrywa błąd (na przykład błąd zapisu w strumieniu dziennika).

Odebrane przez: Zarówno menedżerów zasobów, jak i nadrzędnych menedżerów transakcji.

Wymagana akcja odbiorcy: wykonaj wszystkie operacje potrzebne do wycofania danych transakcji, a następnie wywołaj metodę ZwRollbackComplete. (Aby uzyskać więcej informacji na temat operacji wycofywania, zobacz Obsługa operacji wycofywania).

Ograniczenia: Wszyscy menedżerowie zasobów i menedżerowie transakcji najwyższej jakości muszą obsługiwać TRANSACTION_NOTIFY_ROLLBACK.

TRANSACTION_NOTIFY_RECOVER
Po wysłaniu: menedżer zasobów wywołuje ZwRecoverResourceManager.

Odebrane przez: Menedżerowie zasobów.

Wymagana akcja adresata: Menedżer zasobów musi wywołać metodę ZwRecoverEnlistment. (Aby uzyskać więcej informacji na temat operacji odzyskiwania, zobacz Obsługa operacji odzyskiwania).

Ograniczenia: Żaden.

TRANSACTION_NOTIFY_LAST_RECOVER
Po wysłaniu: Po tym, jak KTM wyśle ostatni TRANSACTION_NOTIFY_RECOVER dla zgłoszeń menedżera zasobów.

Odebrane przez: Menedżerowie zasobów.

Wymagana akcja adresata: zakończ operację odzyskiwania. (Aby uzyskać więcej informacji na temat operacji odzyskiwania, zobacz Obsługa operacji odzyskiwania).

Ograniczenia: Żaden.

TRANSACTION_NOTIFY_INDOUBT
Po wysłaniu: po wywołaniu menedżera zasobów ZwRecoverEnlistment, jeśli KTM nie może określić, czy transakcja powinna zostać zatwierdzona lub wycofana (zazwyczaj dlatego, że tpS ma nadrzędnego menedżera transakcji, który jest niedostępny).

Odebrane przez: Menedżerowie zasobów.

Wymagana akcja adresata: nie rób nic, dopóki KTM nie wyśle TRANSACTION_NOTIFY_COMMIT lub TRANSACTION_NOTIFY_ROLLBACK.

Ograniczenia: Żaden.

TRANSAKCJA_POWIADOMIENIE_RM_ODŁĄCZONY
Po wysłaniu: Menedżer zasobów obsługujący operację zatwierdzania jednofazowego zamyka dojście rejestracji bez wskazania, że transakcja została zatwierdzona lub wycofana.

Odebrane przez: Menedżerowie zasobów i nadrzędni menedżerowie transakcji, którzy mają zaangażowania w transakcji.

Wymagana akcja adresata: operacje oczyszczania specyficzne dla transakcji. Zazwyczaj to powiadomienie jest przydatne menedżerom zasobów o uprawnieniach tylko do odczytu.

Ograniczenia: Żaden.

Powiadomienia dla menedżerów transakcji Superior

Menedżerowie transakcji o najwyższej jakości mogą otrzymywać następujące powiadomienia:

TRANSACTION_NOTIFY_ROLLBACK
Zobacz wcześniejszy opis.

POWIADOMIENIE_O_TRANSAKCJI_RM_ODŁĄCZONY
Zobacz wcześniejszy opis.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Kiedy zostanie wysłany: Gdy wszyscy menedżerowie zasobów otrzymają TRANSACTION_NOTIFY_PREPREPARE i odpowiedzą poprzez wywołanie ZwPrePrepareComplete.

Odebrane przez: Przełożeni kierownicy ds. transakcji.

Wymagana akcja odbiorcy: nadrzędny menedżer transakcji powinien wywołać metodę ZwPrepareEnlistment.

TRANSACTION_NOTIFY_PREPARE_COMPLETE
Po wysłaniu: Gdy wszyscy menedżerowie zasobów otrzymali TRANSACTION_NOTIFY_PREPARE i odpowiedzieli, wywołując polecenie ZwPrepareComplete.

Odebrane przez: Przełożeni menedżerowie transakcji.

Wymagana akcja adresata: Przełożony menedżer transakcji powinien wywołać polecenie ZwCommitEnlistment.

POWIADOMIENIE_O_ZAKOŃCZENIU_ZATWIERDZANIA_TRANSAKCJI
Kiedy zostanie wysłany: Gdy wszyscy menedżerowie zasobów otrzymają TRANSACTION_NOTIFY_COMMIT i odpowiedzą, wywołując ZwCommitComplete.

Odebrane przez: Superior transaction managers.

Wymagana akcja adresata: Operacje oczyszczania transakcji.

TRANSAKCJA_POWIADOMIENIE_ROLBAK_ZAKOŃCZONY
Po wysłaniu: po tym, jak wszyscy menedżerowie zasobów otrzymają TRANSACTION_NOTIFY_ROLLBACK i odpowiedzą, wywołując ZwRollbackComplete.

Odebrane przez: Superior transaction managers.

Wymagana akcja adresata: Operacje oczyszczania transakcji.

TRANSACTION_NOTIFY_RECOVER_QUERY
Kiedy zostanie wysłane: Nadrzędny menedżer transakcji wywołuje ZwRecoverResourceManager.

Odebrane przez: Superior transaction managers.

Wymagana akcja adresata: Wyższy menedżer transakcji musi wywołać polecenie ZwCommitEnlistment lub ZwRollbackEnlistment dla rejestracji.

TRANSACTION_NOTIFY_COMMIT_REQUEST
Po wysłaniu: klient wywołuje element ZwCommitTransaction. Jeśli lepszy menedżer transakcji zarejestrował się na potrzeby tego powiadomienia o rejestracji, KTM wysyła TRANSACTION_NOTIFY_COMMIT_REQUEST do nadrzędnego menedżera transakcji zamiast wysyłania TRANSACTION_NOTIFY_COMMIT do menedżerów zasobów.

Odebrane przez: Superior transaction managers.

Wymagana akcja adresata: nadrzędny menedżer transakcji wywołuje ZwCommitEnlistment.

TRANSACTION_NOTIFY_REQUEST_OUTCOME
Po wysłaniu: menedżer zasobów wywołuje TmRequestOutcomeEnlistment, gdy transakcja jest w stanie przygotowania.

Odebrane przez: Superior transaction managers.

Wymagana akcja odbiorcy: Nadrzędny menedżer transakcji musi wywołać ZwCommitEnlistment lub ZwRollbackEnlistment.

Nieużywane powiadomienia

Następujące powiadomienia są zdefiniowane w pliku Ktmtypes.h, ale KTM obecnie ich nie obsługuje:

TRANSACTION_NOTIFY_DELEGATE_COMMIT

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

TRANSAKCJA_POWIADOMIENIE_MARSHAL

TRANSACTION_NOTIFY_PROMOTE

POWIADOMIENIE_O_TRANSAKCJI_PROMOCJA_NOWE

TRANSACTION_NOTIFY_PROPAGATE_PULL

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

TRANSACTION_NOTIFY_COMMIT_FINALIZE