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

Matriz Requisição × Estado da Chave

A (Aquisição)

Estado da chaveAção do servidorRespostaMomento
Não registradaRegistra (expiração = agora+lease), emite tokenA+token+owner+keyImediatamente
Registrada + expiradaRenova (agora+lease), novo tokenA+token+owner+keyImediatamente
Registrada + holder válido + wait=0Não enfileirarT+owner+keyImediato
Registrada + holder válido + wait>0Enfileirar, resposta pendenteA ou T+owner+keyAo adquirir por release/expiry, ou T quando wait expira
Fila ou capacidade do servidor no limiteNão enfileirarB+owner+keyImediato
  • O caminho de liberação é justo em ordem FIFO: quando o detentor faz R, é repassado diretamente ao detentor da fila que está esperando na frente (sem nova disputa, com um novo token).
  • Apenas o caminho de expiração não é FIFO.
  • Um owner igual ao holder atual não recebe tratamento especial. Ele não autoriza retornar active token nem renovar lease; aplicam-se as regras comuns de uma key retida.
  • Respostas podem chegar fora de ordem; o cliente associa pelo owner ecoado. R (Liberação)
Estado da chaveAção do servidorResposta
Registrada + token confere, com alguém na filaRepassa diretamente a quem está esperando na frente (novo token)R+token+key
Registrada + token confere, sem ninguém na filaExclui a chaveR+token+key
Registrada + token não confereNada (o lock permanece)N+token+key
Não registradaNadaN+token+key

Quando a Expiração É Processada

  • O modo single processa a expiração de forma preguiçosa (lazy) — uma chave que passou de sua expiração é assumida na hora pela próxima aquisição (a segunda linha acima), e uma varredura separada de 5 segundos limpa as chaves expiradas sem ninguém na fila. Assim, uma liberação em uma chave que expirou mas ainda não foi varrida pode receber R em vez de N.
  • No modo cluster, o líder aguarda a próxima entrada de um deadline min-heap que valida token e faz commit por consenso do comando Expire antes de remover a key. Assim diferenças de clock não dividem o estado do lock.