Ticketing
Documentation

Commandes répliquées

Chaque changement d'état de verrou est répliqué sous la forme d'une des commandes ci-dessous, transportée comme entrée de journal dans AppendEntries, et appliquée par chaque nœud dans le même ordre après un commit majoritaire.

Commandes (proposées par le leader)

CommandeChampsSignification
Grantkey, lease_msAcquiert une clé. Le jeton n'est pas dans la commande — la machine à états de chaque nœud l'assigne de façon déterministe au moment de l'application, si bien que chaque nœud calcule le même jeton
ReleasekeyLibère une clé
Expirekey, tokenExpiration de lease pilotée par le leader. Supprimée uniquement si token correspond — une expiration tardive ou dupliquée ne peut pas supprimer un verrou fraîchement octroyé entre-temps (idempotent)

Résultats appliqués (machine à états → leader)

RésultatSignification
Granted { token }Acquisition réussie — le jeton de fencing émis
GrantRejectedUn Grant est arrivé pour une clé déjà détenue (défensif — ne se produit jamais dans le flux normal)
ReleasedLibéré
NotFoundLa clé à libérer n'existait pas
Expired { existed }Expiration traitée — existed indique si elle a réellement été supprimée
NoopRien ne s'est produit

Chaque nœud suit le temps restant d'un lease avec sa propre horloge locale, mais la suppression réelle ne se produit toujours que via une commande Expire validée — c'est pourquoi une dérive d'horloge entre nœuds ne peut jamais diviser l'état des verrous. Si un client se déconnecte avant de recevoir sa réponse, le leader propose lui-même un Release juste après l'octroi, pour nettoyer immédiatement le verrou fantôme.

Flux — réplication d'un Expire

Leader
Suiveur 1
Suiveur 2
détecte l'expiration du lease via son horloge locale
AppendEntries · Expire (key, token)
AppendEntries · Expire (key, token)
OK
commit majoritaire → chaque nœud applique dans le même ordre
jeton non concordant → ignoré — protège un verrou fraîchement octroyé
RPC de consensus (Raft)

Même l'expiration n'est qu'une commande de plus qui passe par la proposition du leader → le commit majoritaire. Grâce à la vérification du token, même si la même clé a été réoctroyée pendant qu'un commit était retardé, un Expire appliqué tardivement ne peut pas supprimer le nouveau verrou.

Terminologie

  • Machine à états (state machine) — la partie qui applique les commandes validées dans l'ordre pour produire l'état courant (ici, la table des verrous). Comme chaque nœud applique les mêmes commandes dans le même ordre, ils convergent toujours vers le même état.
  • Commit — le statut « final » qu'un état atteint une fois enregistré par une majorité de nœuds. Seules les commandes validées sont appliquées à la machine à états.
  • Idempotent — une propriété où appliquer la même commande deux fois par erreur ne change pas le résultat.