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

A · Aquisição

Estruturarefresh

Requisição para adquirir o lock. lease é a proteção pela qual o servidor recupera a key após expirar se o cliente morrer sem release. wait limita a espera em segundos; 0 faz uma única tentativa imediata sem entrar na fila. Não há espera infinita. Sucesso retorna Adquirido A, fim da espera Timeout T, e capacidade cheia da fila/servidor Ocupado B.

owner — Identificador de correlação da resposta

owner é o identificador da resposta de uma tentativa de aquisição. O cliente cria um novo por chamada e o servidor o ecoa em A, T e B para correlacionar respostas em pipeline.

owner não é autoridade do lock nem fencing token. Reenviar a mesma key e owner não retorna active token nem renova o lease. Se até um byte puder ter sido enviado sem resposta confirmada, o cliente não deve reenviar automaticamente esse acquire com o mesmo owner: o resultado é Indeterminate. Não se entra na seção crítica; um grant não observado é recuperado no máximo ao expirar o lease.

Os clientes oficiais criam uma única deadline monotonic para toda a operação a partir do wait normalizado do caller e mantêm essa deadline e o owner nos retries definitivamente não enviados. Imediatamente antes de enviar, o writer arredonda o tempo restante para cima e recalcula o wait wire, de modo que uma conexão tardia não inicie uma nova espera de 255 segundos no server. Uma solicitação queued após a deadline total não é enviada; se puder já ter sido enviada, sua session exata é fechada e o resultado é Indeterminate. Se um A já correlacionado pouco antes da deadline for descoberto tarde no gate de entrega do Ticket, não é preciso fechar a session, mas agenda-se um release compensatório do exact token e retorna-se Indeterminate. T e B correlacionados permanecem, respectivamente, timeout e busy definitivos.

Um wait=0 original continua sendo uma tentativa imediata no wire. Durante sua transport deadline separada de cinco segundos, o cliente pode escolher outra conexão e tentar de novo com o mesmo owner apenas enquanto a solicitação estiver definitivamente não enviada; a tentativa server-side real continua sendo exatamente uma. Nunca retransmite após um possível envio.

Notação de bytes: op é um caractere ASCII, wait/lease são binários (u8, big-endian), 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 · wait · lease · owner)
chave livre → concedido imediatamente
A · concedido (token)
ocupada → espera sua vez na fila FIFO
chega a vez → A · concedido (token)
wait excedido → T · tempo esgotado
wait=0 + retido → T · não adquirido imediato
fila cheia → B · ocupado
requisiçãoresposta

Veja a Matriz Requisição × Estado da Chave para as regras completas de comportamento por estado de chave.