Pemberitahuan Transaksi

KTM menyediakan antrean pemberitahuan untuk setiap manajer sumber daya. KTM mengirimkan pemberitahuan ke manajer sumber daya dengan memasukkannya ke dalam antrean manajer sumber daya.

Manajer sumber daya dapat mengambil pemberitahuan dari antreannya baik secara sinkron atau asinkron.

  • Untuk mengambil pemberitahuan secara sinkron, manajer sumber daya dapat berulang kali memanggil ZwGetNotificationResourceManager.

  • Untuk menerima pemberitahuan secara asinkron, manajer sumber daya dapat memanggil TmEnableCallbacks untuk menyiapkan rutinitas panggilan balik. KTM memanggil rutinitas panggilan balik setiap kali menempatkan pemberitahuan dalam antrean manajer sumber daya.

Ketika manajer sumber daya memanggil ZwCreateEnlistment untuk membuat pendaftaran untuk transaksi, manajer sumber daya menentukan jenis pemberitahuan yang harus diterimanya. Resource manager hanya menerima pemberitahuan yang mereka daftarkan untuk diterima.

Konstanta pemberitahuan ditentukan dalam Ktmtypes.h. Nama konstanta pemberitahuan memiliki format TRANSACTION_NOTIFY_Xxx.

Topik lainnya mencantumkan semua konstanta pemberitahuan yang didefinisikan Ktmtypes.h dan membaginya menjadi tiga grup:

  • Pemberitahuan yang dapat diterima manajer sumber daya

  • Pemberitahuan yang dapat diterima manajer transaksi yang unggul

  • Konstanta pemberitahuan yang ditentukan tetapi saat ini tidak digunakan

Pemberitahuan untuk Resource Manager

Semua manajer sumber daya harus mendaftar untuk menerima pemberitahuan TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE, dan TRANSACTION_NOTIFY_COMMIT, bahkan jika mereka kemudian memanggil ZwReadOnlyEnlistment untuk menandai pendaftaran sebagai baca-saja.

Resource manager dapat mendukung TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, tetapi mereka juga harus mendukung pemberitahuan pra-persiapan, persiapan, dan penerapan multi-fase.

Daftar berikut berisi semua pemberitahuan yang dapat diterima manajer sumber daya:

TRANSACTION_NOTIFY_PREPREPARE
Saat dikirim: Klien memanggil ZwCommitTransaction dan tidak ada manajer sumber daya yang mendukung penerapan fase tunggal, atau jika manajer transaksi yang unggul memanggil ZwPrepareEnlistment.

Diterima oleh: Resource manager.

Tindakan yang diperlukan penerima: Lakukan operasi pra-persiapan lalu panggil ZwPrepareComplete. (Untuk informasi selengkapnya tentang operasi pra-persiapan, lihat Menangani Operasi Penerapan.)

Pembatasan: Manajer sumber daya juga harus mendukung TRANSACTION_NOTIFY_PREPARE dan TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_PREPARE
Saat dikirim: Setelah TRANSACTION_NOTIFY_PREPREPARE jika klien memanggil ZwCommitTransaction dan tidak ada manajer sumber daya yang mendukung penerapan fase tunggal, atau jika manajer transaksi yang unggul memanggil ZwPrepareEnlistment.

Diterima oleh: Resource manager.

Tindakan penerima yang diperlukan: Lakukan operasi persiapan lalu panggil ZwPrepareComplete. (Untuk informasi selengkapnya tentang operasi persiapan, lihat Menangani Operasi Penerapan.)

Pembatasan: Manajer sumber daya juga harus mendukung TRANSACTION_NOTIFY_PREPREPARE dan TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_COMMIT
Saat dikirim: Setelah TRANSACTION_NOTIFY_PREPARE jika klien memanggil ZwCommitTransaction dan tidak ada manajer sumber daya yang mendukung penerapan fase tunggal, atau jika manajer transaksi yang unggul memanggil ZwCommitEnlistment.

Diterima oleh: Resource manager.

Tindakan yang diperlukan penerima: Lakukan operasi penerapan lalu panggil ZwCommitComplete. (Untuk informasi selengkapnya tentang operasi penerapan, lihat Menangani Operasi Penerapan.)

Pembatasan: Manajer sumber daya juga harus mendukung TRANSACTION_NOTIFY_PREPREPARE dan TRANSACTION_NOTIFY_PREPARE.

TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT
Saat dikirim: Klien memanggil ZwCommitTransaction dan manajer sumber daya mendukung operasi penerapan fase tunggal.

Diterima oleh: Resource manager.

Tindakan yang diperlukan penerima: Lakukan transaksi atau panggil ZwSinglePhaseReject. (Untuk informasi selengkapnya tentang operasi penerapan fase tunggal, lihat Menangani Operasi Penerapan.)

Pembatasan: Manajer sumber daya juga harus mendukung TRANSACTION_NOTIFY_PREPREPARE, TRANSACTION_NOTIFY_PREPARE, dan TRANSACTION_NOTIFY_COMMIT.

TRANSACTION_NOTIFY_ROLLBACK
Saat dikirim: Klien memanggil ZwRollbackTransaction, manajer transaksi yang unggul memanggil ZwRollbackEnlistment, atau KTM mendeteksi kesalahan (seperti gagal menulis ke aliran log).

Diterima oleh: Manajer sumber daya dan manajer transaksi yang unggul.

Tindakan yang diperlukan penerima: Lakukan operasi apa pun yang diperlukan untuk mengembalikan data transaksi, lalu panggil ZwRollbackComplete. (Untuk informasi selengkapnya tentang operasi putar kembali, lihat Menangani Operasi Putar Kembali.)

Pembatasan: Semua manajer sumber daya dan manajer transaksi yang unggul harus mendukung TRANSACTION_NOTIFY_ROLLBACK.

TRANSACTION_NOTIFY_RECOVER
Saat dikirim: Manajer sumber daya memanggil ZwRecoverResourceManager.

Diterima oleh: Resource manager.

Tindakan yang diperlukan penerima: Manajer sumber daya harus memanggil ZwRecoverEnlistment. (Untuk informasi selengkapnya tentang operasi pemulihan, lihat Menangani Operasi Pemulihan.)

Pembatasan: Tidak.

TRANSACTION_NOTIFY_LAST_RECOVER
Saat dikirim: Setelah KTM mengirim TRANSACTION_NOTIFY_RECOVER terakhir untuk pendaftaran manajer sumber daya.

Diterima oleh: Resource manager.

Tindakan yang diperlukan penerima: Akhiri operasi pemulihan. (Untuk informasi selengkapnya tentang operasi pemulihan, lihat Menangani Operasi Pemulihan.)

Pembatasan: Tidak.

TRANSACTION_NOTIFY_INDOUBT
Ketika dikirim: Setelah manajer sumber daya memanggil ZwRecoverEnlistment, jika KTM tidak dapat menentukan apakah transaksi harus dilakukan atau digulung balik (biasanya karena TPS memiliki manajer transaksi unggul yang tidak tersedia).

Diterima oleh: Resource manager.

Tindakan yang diperlukan penerima: Jangan lakukan apa pun sampai KTM mengirim TRANSACTION_NOTIFY_COMMIT atau TRANSACTION_NOTIFY_ROLLBACK.

Pembatasan: Tidak.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Saat dikirim: Manajer sumber daya yang menangani operasi penerapan fase tunggal menutup handel pendaftaran tanpa menunjukkan bahwa ia telah berkomitmen atau mengembalikan transaksi.

Diterima oleh: Resource manager dan manajer transaksi unggul yang memiliki pendaftaran untuk transaksi.

Tindakan yang diperlukan penerima: Operasi pembersihan khusus transaksi. Biasanya, pemberitahuan ini berguna untuk manajer sumber daya baca-saja.

Pembatasan: Tidak.

Pemberitahuan untuk Manajer Transaksi Superior

Manajer transaksi yang unggul dapat menerima pemberitahuan berikut:

TRANSACTION_NOTIFY_ROLLBACK
Lihat deskripsi sebelumnya.

TRANSACTION_NOTIFY_RM_DISCONNECTED
Lihat deskripsi sebelumnya.

TRANSACTION_NOTIFY_PREPREPARE_COMPLETE
Saat dikirim: Setelah semua manajer sumber daya menerima TRANSACTION_NOTIFY_PREPREPARE dan merespons dengan memanggil ZwPrepareComplete.

Diterima oleh: Manajer transaksi yang unggul.

Tindakan yang diperlukan penerima: Manajer transaksi yang unggul harus memanggil ZwPrepareEnlistment.

TRANSACTION_NOTIFY_PREPARE_COMPLETE
Saat dikirim: Setelah semua manajer sumber daya menerima TRANSACTION_NOTIFY_PREPARE dan merespons dengan memanggil ZwPrepareComplete.

Diterima oleh: Manajer transaksi yang unggul.

Tindakan yang diperlukan penerima: Manajer transaksi yang unggul harus memanggil ZwCommitEnlistment.

TRANSACTION_NOTIFY_COMMIT_COMPLETE
Saat dikirim: Setelah semua manajer sumber daya menerima TRANSACTION_NOTIFY_COMMIT dan merespons dengan memanggil ZwCommitComplete.

Diterima oleh: Manajer transaksi yang unggul.

Tindakan yang diperlukan penerima: Operasi pembersihan transaksi.

TRANSACTION_NOTIFY_ROLLBACK_COMPLETE
Saat dikirim: Setelah semua manajer sumber daya menerima TRANSACTION_NOTIFY_ROLLBACK dan merespons dengan memanggil ZwRollbackComplete.

Diterima oleh: Manajer transaksi yang unggul.

Tindakan yang diperlukan penerima: Operasi pembersihan transaksi.

TRANSACTION_NOTIFY_RECOVER_QUERY
Saat dikirim: Manajer transaksi yang unggul memanggil ZwRecoverResourceManager.

Diterima oleh: Manajer transaksi yang unggul.

Tindakan yang diperlukan penerima: Manajer transaksi yang unggul harus memanggil ZwCommitEnlistment atau ZwRollbackEnlistment untuk pendaftaran.

TRANSACTION_NOTIFY_COMMIT_REQUEST
Saat dikirim: Klien memanggil ZwCommitTransaction. Jika manajer transaksi yang unggul telah mendaftar untuk pemberitahuan ini untuk pendaftaran, KTM mengirimkan TRANSACTION_NOTIFY_COMMIT_REQUEST ke manajer transaksi yang unggul alih-alih mengirim TRANSACTION_NOTIFY_COMMIT ke manajer sumber daya.

Diterima oleh: Manajer transaksi yang unggul.

Tindakan yang diperlukan penerima: Manajer transaksi yang unggul memanggil ZwCommitEnlistment.

TRANSACTION_NOTIFY_REQUEST_OUTCOME
Saat dikirim: Manajer sumber daya memanggil TmRequestOutcomeEnlistment saat transaksi dalam status disiapkan.

Diterima oleh: Manajer transaksi yang unggul.

Tindakan yang diperlukan penerima: Manajer transaksi yang unggul harus memanggil ZwCommitEnlistment atau ZwRollbackEnlistment.

Pemberitahuan yang Tidak Digunakan

Pemberitahuan berikut didefinisikan dalam Ktmtypes.h, tetapi KTM saat ini tidak mendukungnya:

TRANSACTION_NOTIFY_DELEGATE_COMMIT

TRANSACTION_NOTIFY_ENLIST_MASK

TRANSACTION_NOTIFY_ENLIST_PREPREPARE

TRANSACTION_NOTIFY_MARSHAL

TRANSACTION_NOTIFY_PROMOTE

TRANSACTION_NOTIFY_PROMOTE_NEW

TRANSACTION_NOTIFY_PROPAGATE_PULL

TRANSACTION_NOTIFY_PROPAGATE_PUSH

TRANSACTION_NOTIFY_TM_ONLINE

TRANSACTION_NOTIFY_COMMIT_FINALIZE