Menggunakan Nilai Jam Virtual
KTM menyediakan jam virtual untuk setiap objek manajer transaksi. Ketika manajer sumber daya memanggil ZwCreateTransactionManager, KTM mengatur nilai jam virtual objek ke 1. KTM menaikkan nilai jam virtual setiap kali operasi penerapan dimulai. Setiap kali KTM menulis ke aliran lognya, KTM menyertakan nilai jam virtual saat ini dalam rekaman log.
Ketika manajer sumber daya memanggil ZwRecoverTransactionManager, KTM membaca rekaman aliran log hingga akhir aliran, dan mengatur nilai jam virtual objek manajer transaksi ke nilai terakhir yang ditemukannya di aliran log objek.
Ketika manajer sumber daya memanggil ZwRollforwardTransactionManager, KTM membaca rekaman aliran log hingga nilai jam yang ditentukan, dan mengatur nilai jam virtual objek manajer transaksi ke nilai jam yang ditentukan.
KTM memungkinkan manajer sumber daya dan manajer transaksi yang unggul untuk memodifikasi nilai jam virtual objek manajer transaksi, tetapi mereka biasanya tidak perlu memodifikasi nilai jam.
Kapan Mengubah Nilai Jam Virtual
Biasanya, sistem pemrosesan transaksi (TPS) Anda tidak perlu memodifikasi nilai jam virtual kecuali komponen di TPS Anda mencoba menyinkronkan beberapa aliran log.
Misalnya, TPS Anda berisi beberapa manajer sumber daya yang berkomunikasi satu sama lain selama urutan pra-persiapan/persiapan/penerapan. Anggap juga bahwa setiap manajer sumber daya membuat objek manajer transaksi yang memiliki aliran log unik. Untuk memastikan bahwa KTM memulihkan status semua manajer sumber daya ke titik waktu yang sama selama operasi pemulihan, manajer sumber daya ini mungkin menggunakan langkah-langkah berikut:
Ketika satu manajer sumber daya berkomunikasi dengan yang lain, ia melewati nilai jam virtual terbaru yang telah diterimanya dari KTM atau manajer sumber daya lainnya.
Setiap kali manajer sumber daya memanggil rutinitas KTM yang menerima nilai jam virtual (lihat bagian berikut dalam topik ini), ia melewati nilai jam tertinggi yang telah diterimanya dari KTM atau manajer sumber daya lainnya.
Setiap manajer sumber daya menulis nilai jam virtual ke dalam aliran lognya dan menggunakan nilai-nilai tersebut saat melakukan operasi putar kembali atau pemulihan.
Langkah-langkah ini menyebabkan nilai jam virtual yang disimpan KTM untuk setiap objek manajer transaksi hampir atau sama persis. Oleh karena itu, ketika operasi pemulihan menyebabkan KTM membaca aliran lognya, atau ketika operasi pemutaran kembali menyebabkan manajer sumber daya membaca aliran log mereka, pemulihan atau pembatalan didasarkan pada aliran log yang disinkronkan.
Cara Mengubah Nilai Jam Virtual
Resource manager dapat memodifikasi nilai jam virtual dengan meneruskan nilai baru ke ZwPrepareComplete, ZwPrepareComplete, ZwCommitComplete, ZwRollbackComplete, ZwReadOnlyEnlistment, atau ZwSinglePhaseReject.
Manajer transaksi yang unggul dapat memodifikasi nilai jam virtual dengan meneruskan nilai baru ke ZwPrepareEnlistment, ZwPrepareEnlistment, ZwCommitEnlistment, atau ZwReadOnlyEnlistment.
Selain itu, manajer sumber daya atau manajer transaksi unggul yang menggunakan rutinitas panggilan balik ResourceManagerNotification dapat memodifikasi nilai jam virtual yang diterima rutinitas panggilan balik. KTM kemudian menyimpan nilai yang diperbarui.
Jika manajer sumber daya atau manajer transaksi yang unggul meneruskan nilai jam baru ke KTM, KTM menyimpan nilai baru hanya jika lebih besar dari nilai jam saat ini. Jika tidak, KTM menyimpan nilai jam saat ini.
Manajer sumber daya dan manajer transaksi yang unggul dapat memperoleh nilai jam virtual objek manajer transaksi dengan memanggil rutinitas ZwQueryInformationTransactionManager .