M · 已转移 (Moved)
结构refresh
告知客户端该节点不是 leader,应转而连接 leader(仅集群模式)。正文是以文本 形式给出的 leader 的客户端地址(host:port)—— 是客户端自己需要连接的 地址,而非 Raft 端口。
官方客户端仅在该地址与已登记allowlist中的地址完全一致时将其记为leader提示,然后关闭该session。 即使只发送过一个字节,也不会把该acquire任意对应到M后重发;其结果为Indeterminate。 之后的独立请求以及writer尚未持有的未发送请求使用新的leader连接。如果此时还没有选出 leader、 没有地址可以指向,则会改为发送 E no_leader。
完整的集群行为见协议 (集群)。
字节表示法:
op是 ASCII 字符,addr是 UTF-8 文本(变长,在结构中以N表示)。末尾的\n为0A。
流程
客户端
跟随者
领导者
A · 获取 (key)
M · 已转移 (leader 地址)
关闭旧 session · 已发送 acquire 为 Indeterminate
下一次独立 acquire 在 leader 开始
请求响应
M不含owner与key,而一个session可混合多个acquire。leader→follower切换瞬间,正在commit的请求 可与follower拒绝的请求并存,因此一个M不能作为特定pending确定未获取的证据。这个保守规则防止 重复acquire与same-owner lease延长。