Ticketing
ドキュメント

フレーム構造

RaftのRPCを運ぶ長さプレフィックス付きバイナリフレーミングです。 クライアントプロトコルの\n終端フレームとは異なり、まず長さが送られ、その分のバイト数だけ 読み取られます。1つの接続上ではリクエスト・レスポンスのペアが順番にやり取りされ、 発信側は常にリクエスト側です。

リクエスト(発信側 → 受信側)

構造refresh

レスポンス(受信側 → 発信側)

構造refresh
フィールドサイズ内容
tagu8RPCの種類 — RPCの種類を参照(リクエストのみ)
lenu32、ビッグエンディアン続くペイロードのバイト長
payloadlenバイトpostcard形式でシリアライズされたopenraft型

接続管理のルール

  • len64MiBが上限です(受信時にチェック)。上限を超えるフレーム、不正な形式の フレーム、未知のtag、Raft処理エラーはすべて接続を閉じることで処理されます — 発信側(openraft)が再接続して再試行します。
  • 発信側は対象ノードごとに1つの接続を使い回します。I/Oエラーが起きた場合や、往復の 途中でキャンセルされた場合は、その接続を破棄し、次の呼び出しで新しい接続を張ります — 半端に読み取られたストリームがずれた状態のまま再利用されることはありません。

用語

  • 長さプレフィックス — 本文の長さを先に送り、その分だけ正確に読み取るフレーミング方式。 \nのような区切り文字が不要なため、任意のバイナリデータをそのまま運べます。
  • シリアライズ — メモリ上の構造体を、転送に適したバイト列に変換すること。
  • RPC(リモートプロシージャコール) — ネットワーク越しに、あたかもローカルで呼び出すかの ように他サーバーの関数を呼び出す、リクエスト・レスポンスのペア。