Ticketing
Dokumentasi

B · Busy

Strukturrefresh

Respons yang menyatakan bahwa request acquire (A) sudah tiba, tetapi tidak bisa dimasukkan ke antrean karena antrean key tersebut mencapai batas server (max_waiters, default 16.384). Artinya lock tidak didapat — bukan berarti request-nya salah.

owner adalah nilai dari request yang dipantulkan apa adanya — dari situ bisa diketahui dengan tepat percobaan acquire mana yang ditolak (Aturan pencocokan respons).

Penanganan di klien

Jangan langsung digagalkan. Selama anggaran wait masih tersisa, coba lagi dengan backoff (klien resmi: mulai dari 10 ms, menggandakan hingga 200 ms). Saat antrean melonggar, percobaan berikutnya akan mengantre secara normal. Jika tetap penuh sampai wait habis, barulah laporkan error "busy" ke pemanggil.

Percobaan ulang harus memakai owner yang sama — hanya dengan begitu server mengenalinya sebagai acquire yang sama seandainya acquire tersebut sempat berhasil di sela-sela itu.

Notasi byte: op berupa karakter ASCII, owner bersifat biner (u64, big-endian), dan key berupa teks UTF-8 (panjang variabel, ditampilkan sebagai N di struktur). \n di akhir adalah 0A. Header tetap adalah nilai biner yang bisa mengandung 0x0A, jadi konsumsi berdasarkan jumlah byte lebih dulu sebelum mencari newline.

Alur

Klien
Server
A · acquire (key · owner)
antrean key ini mencapai max_waiters
B · busy (owner dipantulkan)
setelah backoff, coba lagi dengan owner yang sama
A · acquire (percobaan ulang)
saat ada tempat → A · acquired (token)
permintaanrespons

Batas ini bukan flow control, melainkan garis pertahanan memori — mencegah klien terautentikasi menumpuk penunggu tanpa batas pada satu key hingga memori server habis. Nilainya diberi kelonggaran jauh di atas fan-out normal, sehingga dalam operasi sehari-hari respons ini tidak akan terlihat. Batasnya diatur lewat max_waiters di konfigurasi cluster.