Menangani Operasi Penerapan

Ada dua jenis operasi penerapan: penerapan fase tunggal dan penerapan multi-fase. Operasi penerapan fase tunggal terdiri dari satu pemberitahuan yang harus direspons oleh manajer sumber daya, sementara operasi penerapan multi-fase mencakup pemberitahuan tambahan untuk langkah-langkah persiapan.

Operasi penerapan fase tunggal lebih mudah diterapkan. Ini sesuai untuk sistem pemrosesan transaksi (TPMS) yang memiliki salah satu karakteristik berikut:

  • Satu manajer sumber daya.

  • Beberapa manajer sumber daya, semuanya kecuali salah satunya baca-saja dan tidak berpartisipasi dalam operasi penerapan.

Operasi penerapan multi-fase diperlukan jika beberapa manajer sumber daya berpartisipasi dalam operasi penerapan.

Operasi Penerapan Single-Phase

Jika Anda ingin TPS mendukung operasi penerapan fase tunggal, satu (dan hanya satu) manajer sumber daya harus mendaftar untuk menerima pemberitahuan TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT untuk pendaftarannya. Semua manajer sumber daya lainnya harus bersifat baca-saja.

TPS yang mencakup manajer transaksi unggul tidak dapat menggunakan penerapan fase tunggal.

Jika manajer sumber daya telah mendaftar untuk menerima pemberitahuan TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT, KTM mengirimkan pemberitahuan semacam ini ketika klien transaksional memanggil ZwCommitTransaction.

Ketika manajer sumber daya menerima pemberitahuan TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT untuk transaksi, manajer sumber daya dapat melakukan transaksi atau menolak penerapan fase tunggal.

Untuk melakukan transaksi, resource manager harus melakukan hal berikut:

  1. Bersihkan data apa pun yang disimpan dalam cache non-permanen (penyimpanan dalam memori), seperti area marshalling CLFS untuk aliran log CLFS.

    Manajer sumber daya harus memindahkan data dari cache ke media penyimpanan yang tahan lama. Misalnya, manajer sumber daya yang menggunakan CLFS dapat memanggil ClfsFlushBuffers.

  2. Buat semua perubahan data permanen dan publik (yaitu, terlihat di luar cakupan manajer sumber daya).

  3. Hubungi ZwCommitComplete.

Setelah memanggil ZwCommitComplete, manajer sumber daya harus memanggil ZwClose untuk menutup handel pendaftaran.

Untuk menolak operasi penerapan fase tunggal untuk transaksi, manajer sumber daya dapat memanggil ZwSinglePhaseReject. Jika manajer sumber daya memanggil ZwSinglePhaseReject, KTM segera mengubah operasi penerapan dari fase tunggal menjadi multi-fase.

Jika manajer sumber daya lain mendaftar dalam transaksi yang sama, mereka harus baca-saja. Namun, mereka harus mendaftar untuk menerima pemberitahuan TRANSACTION_NOTIFY_RM_DISCONNECTED, yang mereka terima jika manajer sumber daya yang menangani operasi penerapan fase tunggal menutup handel pendaftaran tanpa menunjukkan bahwa ia telah melakukan atau mengembalikan transaksi.

Operasi Penerapan Multi-Fase

Operasi penerapan multi-fase dimulai ketika salah satu peristiwa berikut terjadi:

Operasi penerapan multi-fase terdiri dari tiga fase berurutan: pra-persiapan, persiapan, dan penerapan.

Fase Pra-Persiapan

Fase pra-persiapan (juga dikenal sebagai fase nol) dari operasi penerapan dimulai ketika KTM mengirim pemberitahuan TRANSACTION_NOTIFY_PREPREPARE ke semua manajer sumber daya. KTM mengirimkan pemberitahuan ini jika tidak ada manajer sumber daya yang mendukung operasi penerapan fase tunggal untuk transaksi, atau jika manajer transaksi unggul memanggil ZwPrepareEnlistment.

Ketika setiap manajer sumber daya menerima pemberitahuan TRANSACTION_NOTIFY_PREPREPARE, manajer sumber daya harus melakukan hal berikut:

  1. Bersihkan data apa pun yang disimpan dalam cache non-permanen (penyimpanan dalam memori), seperti area marshalling CLFS untuk aliran log CLFS.

    Manajer sumber daya harus memindahkan data dari cache ke media penyimpanan yang tahan lama. Misalnya, manajer sumber daya yang menggunakan CLFS dapat memanggil ClfsFlushBuffers.

  2. Panggil ZwPrepareComplete.

Setelah manajer sumber daya memanggil ZwPreprepareComplete, manajer sumber daya dapat terus menerima dan melayani permintaan klien. Tetapi manajer sumber daya harus memperlakukan semua modifikasi data sebagai operasi pass-through cache yang segera ditulis ke media penyimpanan yang tahan lama.

Jika manajer sumber daya mengalami kesalahan saat memproses pemberitahuan TRANSACTION_NOTIFY_PREPREPARE, manajer sumber daya harus memanggil ZwRollbackEnlistment untuk mengembalikan transaksi.

Fase Persiapan

Fase persiapan (juga dikenal sebagai fase satu) dari operasi penerapan dimulai ketika KTM mengirim pemberitahuan TRANSACTION_NOTIFY_PREPARE ke semua manajer sumber daya. KTM mengirimkan pemberitahuan ini setelah TRANSACTION_NOTIFY_PREPREPARE jika tidak ada manajer sumber daya yang mendukung penerapan fase tunggal atau jika manajer transaksi unggul memanggil ZwPrepareEnlistment.

Ketika setiap manajer sumber daya menerima pemberitahuan TRANSACTION_NOTIFY_PREPARE, manajer sumber daya harus melakukan hal berikut:

  1. Hentikan layanan permintaan klien dan laporkan permintaan klien berikutnya sebagai kesalahan klien.

  2. Pastikan bahwa semua data telah dipindahkan ke penyimpanan yang tahan lama.

  3. Hubungi ZwPrepareComplete.

Jika manajer sumber daya mengalami kesalahan saat memproses pemberitahuan TRANSACTION_NOTIFY_PREPARE, manajer sumber daya harus memanggil ZwRollbackEnlistment untuk mengembalikan transaksi. Namun, manajer sumber daya tidak dapat mengembalikan transaksi setelah memanggil ZwPrepareComplete.

Fase Penerapan

Fase penerapan (juga dikenal sebagai fase dua) dari operasi penerapan dimulai ketika KTM mengirim pemberitahuan TRANSACTION_NOTIFY_COMMIT ke semua manajer sumber daya. KTM mengirimkan pemberitahuan ini setelah TRANSACTION_NOTIFY_PREPARE jika tidak ada manajer sumber daya yang mendukung penerapan fase tunggal atau jika manajer transaksi unggul memanggil ZwCommitEnlistment.

Ketika setiap manajer sumber daya menerima pemberitahuan TRANSACTION_NOTIFY_COMMIT, manajer sumber daya harus melakukan hal berikut:

  1. Buat semua perubahan data permanen dan publik (yaitu, terlihat oleh transaksi lain).

    Biasanya, manajer sumber daya membuat perubahan permanen dan publik dengan menyalin data transaksi yang disimpan dari aliran log ke penyimpanan publik dan permanen database. Untuk informasi selengkapnya tentang cara menggunakan aliran log, lihat Menggunakan Aliran Log dengan KTM.

  2. Hubungi ZwCommitComplete.

Setelah manajer sumber daya memanggil ZwCommitComplete, manajer sumber daya harus memanggil ZwClose untuk menutup handel pendaftaran.

Jika manajer sumber daya mengalami kesalahan saat memproses pemberitahuan TRANSACTION_NOTIFY_COMMIT, manajer sumber daya harus mematikan dirinya sendiri. Lain kali sistem operasi memuat ulang manajer sumber daya, proses pemulihan manajer sumber daya harus memulihkan transaksi ke keadaan yang diketahui baik sebelum kesalahan terjadi.