Actuellement en test : le code GitHub sera ouvert une fois terminé.

R · Libération

Structurerefresh

Une requête de libération de verrou. token est le jeton de fencing reçu lors de cette acquisition, et la libération n'a lieu que s'il correspond au jeton actuellement détenu. La réponse est Libéré R ou Introuvable N.

token — le mécanisme qui évite de relâcher le verrou d'autrui

Sans vérification du jeton, un enchaînement dangereux devient possible. Pendant qu'une requête de libération est réessayée à travers un basculement, le verrou d'origine peut être récupéré par l'expiration du lease puis réoctroyé à un autre client — et la libération arrivée en retard relâcherait alors le verrou de ce nouveau détenteur. Ne libérer que si le jeton correspond ferme ce chemin.

Si le jeton diffère, N (introuvable) arrive et le verrou reste intact. Les nouveaux essais de libération doivent toujours être envoyés avec le même jeton, et la correspondance des réponses utilise elle aussi le token renvoyé en écho (Règles de correspondance des réponses).

Notation des octets : op est un caractère ASCII, token est binaire (u64, big-endian), et key est du texte UTF-8 (longueur variable, notée N dans la structure). Le \n final est 0A. L'en-tête fixe est une valeur binaire et peut contenir 0x0A : il faut donc le consommer d'abord selon son nombre d'octets, avant de chercher le retour à la ligne.

Flux

Détenteur X
Serveur
Attendant Y
R · libération (key · token)
R · libéré
si un attendant existe → A · remise directe (nouveau token)
si la clé n'existait pas ou si le jeton ne correspond pas
N · introuvable
requêteréponse

Si un attendant existe pour la clé libérée, elle lui est remise directement à la tête de la file, sans nouvelle mise en concurrence — séparément du R (libéré) envoyé à celui qui libère, l'attendant reçoit un A (acquis) portant un nouveau jeton.