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

M · Redirigé

Structurerefresh

Indique au client que ce nœud n'est pas le leader, et qu'il doit s'adresser au leader à la place (cluster uniquement). Le corps est l'adresse client du leader (host:port) sous forme de texte — l'adresse à laquelle le client se connecte lui-même, pas le port Raft.

Les clients officiels ne mémorisent cette adresse comme indice du leader que si elle correspond exactement à une adresse déjà inscrite dans leur allowlist, puis ferment cette session. Un acquire dont un seul octet a pu être envoyé n'est ni associé arbitrairement à M, ni retransmis : il se termine par Indeterminate. Les requêtes indépendantes suivantes et les requêtes non envoyées que le writer ne détient pas encore utilisent la nouvelle connexion au leader. Si aucun leader n'a encore été élu et qu'il n'y a pas d'adresse à indiquer, un E no_leader est envoyé à la place.

Voir Protocole (Cluster) pour le comportement complet du cluster.

Notation des octets : op est un caractère ASCII, et addr est du texte UTF-8 (longueur variable, notée N dans la structure). Le \n final est 0A.

Flux

Client
Suiveur
Leader
A · acquisition (key)
M · redirigé (adresse du leader)
ferme l'ancienne session · acquire envoyé = Indeterminate
le prochain acquire indépendant commence chez le leader
requêteréponse

M ne contient ni owner ni key, et une session peut mélanger plusieurs acquires. Lors d'une transition leader→suiveur, des requêtes en cours de commit peuvent coexister avec celles refusées par le suiveur ; un M ne prouve donc pas qu'un pending précis n'a pas acquis le verrou. Cette règle prudente empêche les acquires en double et la prolongation du lease avec le même owner.