Menangani Operasi Putar Kembali

Manajer sumber daya, klien transaksi, atau KTM dapat mengembalikan transaksi jika menentukan bahwa transaksi tidak boleh dilakukan (biasanya karena kesalahan telah terdeteksi).

Untuk mengembalikan transaksi, manajer sumber daya dapat memanggil ZwRollbackEnlistment. Setelah manajer sumber daya memanggil ZwCreateEnlistment untuk mendaftar dalam transaksi, manajer sumber daya dapat mengembalikan transaksi kapan saja sebelum memanggil ZwPrepareComplete.

Klien transaksional dapat mengembalikan transaksi mereka dengan memanggil ZwRollbackTransaction. Setelah klien transaksional memanggil ZwCreateTransaction untuk membuat transaksi, klien dapat menggulung balik transaksi kapan saja sebelum memanggil ZwCommitTransaction.

Selain itu, klien transaksional dapat menetapkan nilai waktu habis untuk transaksi dengan memanggil ZwSetInformationTransaction. KTM mengembalikan transaksi jika belum dilakukan oleh jumlah waktu yang ditentukan.

Saat panggilan ke ZwRollbackEnlistment atau ZwRollbackTransaction dilakukan, atau ketika nilai waktu habis terlampaui, KTM mengirimkan pemberitahuan TRANSACTION_NOTIFY_ROLLBACK ke semua manajer sumber daya.

Saat setiap manajer sumber daya menerima pemberitahuan TRANSACTION_NOTIFY_ROLLBACK, manajer sumber daya harus melakukan hal berikut:

  1. Pulihkan data transaksi ke status tempat transaksi berada sebelum manajer sumber daya terdaftar dalam transaksi.

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

  2. Hubungi ZwRollbackComplete.

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

Jika resource manager memulai operasi putar kembali, manajer sumber daya harus menggunakan antarmuka kliennya untuk memberi tahu klien bahwa transaksi gagal.