Actualmente en pruebas: el código de GitHub se abrirá al finalizar.

B · Ocupado

Estructurarefresh

Respuesta a una solicitud Acquire (A) no admitida porque la cola de la key o la admisión global key/waiter/pending/memory llegó al límite. Esta solicitud definitivamente no obtuvo el bloqueo y su trama no era inválida.

owner es el valor de la solicitud repetido como correlator; identifica exactamente el acquire rechazado (véanse reglas de emparejamiento).

Manejo del cliente

Los clientes oficiales devuelven inmediatamente el B correlacionado al caller como error Busy/Capacity y no reenvían internamente el mismo acquire lógico. Para reintentar, el caller define deadline global y backoff, y comienza explícitamente un acquire nuevo con owner nuevo.

Un B realmente observado demuestra no adquisición, así que otra llamada separada es segura. Nunca infiera B de un envío sin respuesta; ese resultado es Indeterminate.

Notación de bytes: op es un carácter ASCII, owner es binario (u64, big-endian), y key es texto UTF-8 (longitud variable, mostrado como N en la estructura). El \n final es 0A. La cabecera fija es un valor binario y puede contener 0x0A, así que hay que consumirla primero según su número de bytes antes de buscar el salto de línea.

Flujo

Cliente
Servidor
A · adquirir (key · owner)
la cola de esta clave alcanzó max_waiters
B · ocupado (owner reflejado)
devolver Busy — caller decide si inicia un acquire lógico nuevo
A · acquire nuevo (retry opcional)
cuando haya lugar → A · adquirido (token)
solicitudrespuesta

Los límites son memory guardrails. Rechazan nuevos acquires antes de un OOM del daemon y reservan recursos para exact-token release, respuestas aprobadas, cleanup y Raft recovery. Causas como key_busy, per_key_limit y global_overload se distinguen en metrics/logs, no en el wire.