Saat ini dalam pengujian: kode GitHub akan dibuka setelah selesai.

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.

AturanDetail
Kunci pencocokanPenolakan pasti karena capacity antrean/server; langsung Busy, tanpa retry internal
Beberapa request dengan (op, key) samaFIFO tidak boleh diasumsikan — selalu tentukan lewat identitasnya. Lihat penjelasan di bawah
Waktu registrasiPenunggu didaftarkan sebelum request dikirim (mencegah race di mana respons tiba lebih dulu)
Penanganan N/TDikembalikan sebagai nilai non-error ("tidak ada" / "timed out")
Penanganan BAntrean penuh — jangan langsung gagalkan, coba ulang dengan backoff selama anggaran wait masih ada
Penanganan MSimpan hanya address allowlisted sebagai leader hint lalu tutup; tanpa owner/key tidak dapat dicocokkan ke pending terkirim
Penanganan LHanya perbarui leader hint dan pertahankan koneksi; notifikasi server, bukan respons
E no_leader / E not_active / E auth_failedTutup dan terapkan backoff sesuai error; no_leader juga membatalkan hint
E lain / respons tidak dikenalTidak dapat dikorelasikan sehingga connection-fatal; acquire terkirim menjadi Indeterminate
Respons tanpa penunggu yang cocokKetidakcocokan 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.