M · 移動
構造refresh
このノードはリーダーではないので、代わりにリーダーへ行くようにクライアントへ伝えます (クラスタのみ)。ボディはテキストとしてのリーダーのクライアントアドレス (host:port)です — クライアント自身が接続するアドレスであり、Raftポートではありません。
公式クライアントは、あらかじめallowlistに登録されたアドレスと完全一致する場合だけleader hintとして 記憶し、そのsessionを閉じます。1バイトでも送信したacquireをMへ恣意的に対応付けて再送せず、 Indeterminateとして終了します。 以後の独立requestやwriterがまだ保持していない未送信requestは 新しいleader接続を使います。リーダーがまだ選出されておらず案内できるアドレスがない場合は、代わりに E no_leaderが送られます。
クラスタ全体の動作はプロトコル (クラスタ)を参照してください。
バイト表記:
opはASCII文字、addrはUTF-8テキスト(可変長、構造上はNと表記)です。 末尾の\nは0Aです。
フロー
クライアント
フォロワー
リーダー
A · 獲得 (key)
M · 移動 (リーダーのアドレス)
既存sessionを閉じる · 送信済みacquireはIndeterminate
次の独立acquireをleaderで開始
リクエストレスポンス
Mにはownerとkeyがなく、1つのsessionには複数のacquireが混在できます。leaderからfollowerへ 切り替わる瞬間にはcommit中のrequestとfollowerが拒否したrequestが共存し得るため、1つのMを 特定pendingの確定未獲得証拠にはしません。この保守的な規則が重複acquireとsame-owner lease延長を防ぎます。