Aturan Pencocokan Respons (Implementasi Klien)
Karena respons bisa datang tidak berurutan relatif terhadap request (respons untuk acquire yang menunggu tiba saat gilirannya datang), klien harus memasangkan respons ke request menggunakan aturan berikut — skema demultiplexing yang memilah respons yang bercampur dalam satu koneksi kembali ke request masing-masing.
| Aturan | Detail |
|---|---|
| Kunci pencocokan | Penolakan pasti karena capacity antrean/server; langsung Busy, tanpa retry internal |
| Beberapa request dengan (op, key) sama | FIFO tidak boleh diasumsikan — selalu tentukan lewat identitasnya. Lihat penjelasan di bawah |
| Waktu registrasi | Penunggu didaftarkan sebelum request dikirim (mencegah race di mana respons tiba lebih dulu) |
Penanganan N/T | Dikembalikan sebagai nilai non-error ("tidak ada" / "timed out") |
Penanganan B | Antrean penuh — jangan langsung gagalkan, coba ulang dengan backoff selama anggaran wait masih ada |
Penanganan M | Simpan hanya address allowlisted sebagai leader hint lalu tutup; tanpa owner/key tidak dapat dicocokkan ke pending terkirim |
Penanganan L | Hanya perbarui leader hint dan pertahankan koneksi; notifikasi server, bukan respons |
E no_leader / E not_active / E auth_failed | Tutup dan terapkan backoff sesuai error; no_leader juga membatalkan hint |
E lain / respons tidak dikenal | Tidak dapat dikorelasikan sehingga connection-fatal; acquire terkirim menjadi Indeterminate |
| Respons tanpa penunggu yang cocok | Ketidakcocokan protocol/session: tutup. Untuk A, teruskan exact token yang diketahui ke reserved release lane |
Mengapa harus lewat identitas, bukan FIFO
Bahkan untuk satu key, sukses langsung, menunggu queue, dan penolakan B selesai pada waktu berbeda. Banyak key juga dipipeline pada satu koneksi. Jangan cocokkan FIFO; periksa echoed identifier, op, dan key sekaligus.
Request yang dibatalkan dan lock yatim
Jika request yang dibatalkan sudah mendapat grant di server, lock dapat tersisa. Setelah satu byte dikirim tanpa respons final, hasilnya Indeterminate. Jangan kirim ulang A dengan owner yang sama sebagai query status. Hanya jika token sudah diparse, kirim best-effort exact-token R; grant tak dikenal dipulihkan oleh lease expiry.
Karena itu koneksi ditutup setelah cancel pascakirim atau framing error. Membuang pending saja dapat membuat respons yatim. Socket close bukan bukti release grant committed: exact-token R bila diketahui, selain itu Indeterminate sampai lease expiry.