Derzeit im Test: Der GitHub-Code wird nach Abschluss veröffentlicht.

M · Verwiesen

Strukturrefresh

Teilt dem Client mit, dass dieser Knoten nicht der Leader ist, und verweist stattdessen auf den Leader (nur Cluster). Der Body ist die Client-Adresse des Leaders (host:port) als Text — die Adresse, mit der sich der Client selbst verbindet, nicht der Raft-Port.

Offizielle Clients merken sich die Adresse nur dann als Leader-Hinweis, wenn sie exakt einer bereits registrierten Allowlist-Adresse entspricht, und schließen danach diese Session. Ein Acquire, von dem auch nur ein Byte gesendet wurde, wird keinem M willkürlich zugeordnet und nicht erneut gesendet; er endet als Indeterminate. Spätere unabhängige Requests und noch nicht vom Writer gehaltene, ungesendete Requests nutzen die neue Leader-Verbindung. Wurde noch kein Leader gewählt und gibt es keine Adresse, auf die verwiesen werden kann, wird stattdessen ein E no_leader gesendet.

Das vollständige Cluster-Verhalten findest du unter Protokoll (Cluster).

Byte-Notation: op ist ein ASCII-Zeichen, und addr ist UTF-8-Text (variable Länge, in der Struktur als N dargestellt). Das abschließende \n ist 0A.

Ablauf

Client
Follower
Leader
A · acquire (key)
M · verwiesen (Leader-Adresse)
alte Session schließen · gesendeter Acquire = Indeterminate
nächster unabhängiger Acquire beginnt beim Leader
AnfrageAntwort

M enthält weder owner noch key, und eine Session kann mehrere Acquires mischen. Beim Wechsel von Leader zu Follower können gerade commitete und vom Follower abgelehnte Requests nebeneinander bestehen; ein einzelnes M beweist daher nicht, dass ein bestimmter Pending-Request nicht erworben wurde. Diese konservative Regel verhindert doppelte Acquires und eine same-owner Lease-Verlängerung.