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

B · Busy

Strukturrefresh

Respons untuk Acquire request (A) yang tidak diterima karena queue key atau admission global key/waiter/pending/memory mencapai batas. Request ini pasti tidak memperoleh lock dan frame-nya tidak salah.

owner adalah nilai request yang di-echo sebagai correlator dan mengidentifikasi acquire yang ditolak (lihat aturan pencocokan).

Penanganan klien

Klien resmi langsung mengembalikan B yang terkorelasi ke caller sebagai error Busy/Capacity dan tidak mengirim ulang acquire logis yang sama secara internal. Untuk mencoba lagi, caller menetapkan deadline global dan backoff lalu secara eksplisit memulai acquire baru dengan owner baru.

B yang benar-benar diamati membuktikan tidak memperoleh lock, jadi call baru terpisah aman. Jangan menyimpulkan B dari kiriman tanpa respons; hasil itu Indeterminate.

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)
kembalikan Busy — caller menentukan acquire logis baru
A · acquire baru (retry opsional)
saat ada ruang → A · acquired (token)
permintaanrespons

Batas ini adalah memory guardrails. Ia menolak acquire baru sebelum daemon OOM sambil menyisakan resource untuk exact-token release, respons yang disetujui, cleanup, dan Raft recovery. Penyebab key_busy, per_key_limit, global_overload, dll. dibedakan di metrics/logs, bukan wire.