Matriks Request × Status Key
A (Acquire)
| Status key | Aksi server | Respons | Waktu |
|---|---|---|---|
| Belum terdaftar | Daftarkan (expiry = now+lease), terbitkan token | A+token+owner+key | Langsung |
| Terdaftar + sudah expired | Perbarui (now+lease), token baru | A+token+owner+key | Langsung |
Terdaftar + holder valid + wait=0 | Jangan antrekan | T+owner+key | Langsung |
Terdaftar + holder valid + wait>0 | Antrekan, respons ditahan | A atau T+owner+key | Saat didapat via release/expiry, atau T ketika wait habis |
| Queue atau capacity server mencapai batas | Jangan antrekan | B+owner+key | Langsung |
- Jalur release bersifat adil secara FIFO: saat pemegang melakukan
R, lock diserahkan langsung ke penunggu di depan antrean (tanpa perebutan ulang, token baru). - Hanya jalur expiry yang non-FIFO.
owneryang sama dengan holder saat ini tidak diperlakukan khusus. Ia bukan wewenang untuk mengembalikan active token atau memperbarui lease; aturan key yang sedang dipegang tetap berlaku.- Respons dapat tiba tidak sesuai urutan request; klien mencocokkan lewat
owneryang di-echo.R(Release)
| Status key | Aksi server | Respons |
|---|---|---|
| Terdaftar + token cocok, ada penunggu | Serahkan langsung ke penunggu di depan (token baru) | R+token+key |
| Terdaftar + token cocok, tidak ada penunggu | Hapus key | R+token+key |
| Terdaftar + token tidak cocok | Tidak ada (lock tetap dipegang) | N+token+key |
| Belum terdaftar | Tidak ada | N+token+key |
Kapan Expiry Diproses
- Mode single memproses expiry secara lazy — key yang sudah lewat expiry-nya langsung diambil alih oleh acquire berikutnya (baris kedua di atas), dan sweep terpisah setiap 5 detik membersihkan key expired yang tidak punya penunggu. Jadi release pada key yang sudah expired tapi belum disapu bisa mendapat
R, bukanN. - Dalam cluster mode, leader menunggu tenggat berikutnya pada token-validating deadline min-heap lalu commit perintah
Expiremelalui konsensus sebelum key hilang. Perbedaan clock antarnode tidak membelah status lock.