Atualmente em testes: o código do GitHub será aberto quando concluído.

B · Ocupado

Estruturarefresh

Resposta a uma requisição Acquire (A) não admitida porque a fila da key ou a admissão global key/waiter/pending/memory atingiu o limite. Essa requisição definitivamente não obteve o lock e seu quadro não era inválido.

owner é o valor da requisição ecoado como correlator e identifica exatamente o acquire rejeitado (veja regras de associação).

Tratamento do cliente

Clientes oficiais retornam imediatamente o B correlacionado ao caller como erro Busy/Capacity e não reenviam internamente o mesmo acquire lógico. Para tentar novamente, o caller define deadline global e backoff, e inicia explicitamente novo acquire com novo owner.

Um B realmente observado prova a não aquisição, portanto outra chamada é segura. Nunca deduza B de envio sem resposta; esse resultado é Indeterminate.

Notação de bytes: op é um caractere ASCII, owner é binário (u64, big-endian), e key é texto UTF-8 (comprimento variável, mostrado como N na estrutura). O \n final é 0A. O cabeçalho fixo é um valor binário e pode conter 0x0A, então precisa ser consumido primeiro pela contagem de bytes, antes de procurar a nova linha.

Fluxo

Cliente
Servidor
A · aquisição (key · owner)
a fila desta chave atingiu max_waiters
B · ocupado (owner ecoado)
retornar Busy — caller decide sobre novo acquire lógico
A · novo acquire (retry opcional)
quando houver espaço → A · adquirido (token)
requisiçãoresposta

Os limites são memory guardrails. Rejeitam novos acquires antes de OOM do daemon e reservam recursos para exact-token release, respostas aprovadas, cleanup e Raft recovery. Causas como key_busy, per_key_limit e global_overload são diferenciadas em metrics/logs, não no wire.