Currently in testing: the GitHub code will be opened once complete.

M · Moved

Structurerefresh

Tells the client this node isn't the leader, so go to the leader instead (cluster only). The body is the leader's client address (host:port) as text — the address the client itself connects to, not the Raft port.

Official clients remember the address as a leader hint only when it exactly matches an address already registered in their allowlist, then close that session. They do not arbitrarily match M to or retransmit any acquire for which even one byte was sent; that acquire ends as Indeterminate. Later independent requests, and unsent requests not yet held by the writer, use the new leader connection. If no leader has been elected yet and there's no address to point to, an E no_leader is sent instead.

See Protocol (Cluster) for the full cluster behavior.

Byte notation: op is an ASCII character, and addr is UTF-8 text (variable-length, shown as N in the structure). The trailing \n is 0A.

Flow

Client
Follower
Leader
A · acquire (key)
M · moved (leader address)
close old session · any sent acquire is Indeterminate
next independent acquire begins on leader
requestresponse

M has no owner or key, and a single session may mix multiple acquires. During a leader-to-follower transition, requests being committed can coexist with requests rejected by the follower, so one M is not proof that a particular pending acquire was not granted. This conservative rule prevents duplicate acquires and same-owner lease extension.