現在テスト中です: 完了後にGitHubのコードを公開する予定です。

E · エラー

構造refresh

処理できない要求への応答です。keyの代わりに理由(reason)が入ります。keyはechoされないため、pipeline中にどの要求が失敗したかframeだけでは特定できません。したがって全てのEconnection-fatalです。サーバーは可能ならEをflushして接続を閉じ、公式クライアントもsessionを破棄します。1 byteでも送信されたacquireで確定応答がなければ、成功/失敗を推定せずIndeterminateになります。

reason原因接続
auth_failed認証ハンドシェイクのダイジェスト不一致閉じる
bad_op未知のopコード閉じる
bad_request固定header不足(Aは10 bytes、Rは8 bytes)閉じる
bad_leaselease0または251..255閉じる
bad_keyキーが欠落 / 128バイト超過 / 空白や改行を含む / UTF-8でない閉じる
line_too_longフレームが192バイト超過閉じる
no_leader(クラスタ)現在リーダー不明 — 選出が進行中。しばらくして再試行閉じる
not_activeノードが処理不可 — シャットダウン中閉じる
  • 理由はこの8つが全てで、全て接続を閉じます。raw clientは診断に使えますが同じstreamを再同期して再利用してはいけません。
  • 公式クライアントはkeyと時間範囲を送信前に検証するため、bad_*は通常のAPI結果ではありません。
  • no_leadernot_activeは一時状態でも、Eにはowner/keyがなく安全に相関できません。sessionを破棄し、未送信要求だけを新しい接続で試します。送信されたacquireは自動再送しません。
  • MLno_leadernot_activeはcluster modeだけです。
  • capacity満杯はEではなくB(busy)です。ownerとkeyをechoして拒否要求を特定できます。

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

フロー

クライアント
サーバー
不正なframe(例: 192B超過)
E · line_too_long
Eをflush後に接続を閉じる
送信済みacquireはIndeterminate
リクエストレスポンス

Eは診断情報を観測させますが、安全なstream再利用は許しません。回復可能なcapacity拒否にはowner/keyをechoするB(busy)を使います。