Ticketing
ドキュメント

L · リーダー通知

構造refresh

リクエストへの応答ではなく、サーバーが自ら送る通知です(クラスタ専用)。Raftのリーダーが 変わったことを検知すると、そのノードに接続しているすべてのクライアントへ、新しいリーダーの クライアントアドレスを1回ずつ送ります。

Mとの違い

M · 移動L · リーダー通知
性質リクエストへの応答サーバー発の通知(リクエストと無関係)
意味「このリクエストはここでは処理できない」「リーダーが変わった」(情報)
接続閉じて新リーダーへ再接続維持 — ヒントのみ更新
このノードリーダーでないことが確実このノード自身が新リーダーの可能性もある

Lを受け取って接続を閉じてはいけません。通知を送ったノードがまさにその新リーダーである ことが多く、その接続でやり取りするリクエストもまだ残っています。

なぜ必要か

この通知がないと、クライアントはリーダーが変わった事実をリクエストを1回投げてMで 弾かれてはじめて知ることになります。Lはその往復をなくし、フェイルオーバー直後の最初の リクエストから直接新しいリーダーへ向かわせます。

このopを知らない旧バージョンのクライアントは無視しても動作に問題ありません — 性能が通知以前の水準(リクエスト → M → 再試行)に戻るだけです。

バイト表記: opはASCII文字、addrはUTF-8テキスト(可変長、構造上はNと表記)です。 末尾の\n0Aです。

フロー

クライアント
接続中のノード
新しいリーダー
選出によりリーダーが変わる
L · リーダー通知 (新リーダーのアドレス)
リーダーヒントのみ更新 — 接続は維持
次のリクエストから直接新リーダーへ
A · 獲得済み (token)
リクエストレスポンス

シングルサーバーモードではリーダーという概念がないため、この通知は送られません。クラスタの 動作全般はプロトコル (クラスタ)を参照してください。