A · Aquisição
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/leasesão binários (u8, big-endian),owneré binário (u64, big-endian), ekeyé texto UTF-8 (comprimento variável, mostrado comoNna estrutura). O\nfinal é0A. O cabeçalho fixo é um valor binário e pode conter0x0A, então precisa ser consumido primeiro pela contagem de bytes, antes de procurar a nova linha.
Fluxo
Veja a Matriz Requisição × Estado da Chave para as regras completas de comportamento por estado de chave.