E · エラー
構造refresh
処理できない要求への応答です。keyの代わりに理由(reason)が入ります。keyはechoされないため、pipeline中にどの要求が失敗したかframeだけでは特定できません。したがって全てのEはconnection-fatalです。サーバーは可能ならEをflushして接続を閉じ、公式クライアントもsessionを破棄します。1 byteでも送信されたacquireで確定応答がなければ、成功/失敗を推定せずIndeterminateになります。
| reason | 原因 | 接続 |
|---|---|---|
auth_failed | 認証ハンドシェイクのダイジェスト不一致 | 閉じる |
bad_op | 未知のopコード | 閉じる |
bad_request | 固定header不足(Aは10 bytes、Rは8 bytes) | 閉じる |
bad_lease | leaseが0または251..255 | 閉じる |
bad_key | キーが欠落 / 128バイト超過 / 空白や改行を含む / UTF-8でない | 閉じる |
line_too_long | フレームが192バイト超過 | 閉じる |
no_leader | (クラスタ)現在リーダー不明 — 選出が進行中。しばらくして再試行 | 閉じる |
not_active | ノードが処理不可 — シャットダウン中 | 閉じる |
- 理由はこの8つが全てで、全て接続を閉じます。raw clientは診断に使えますが同じstreamを再同期して再利用してはいけません。
- 公式クライアントはkeyと時間範囲を送信前に検証するため、
bad_*は通常のAPI結果ではありません。 no_leaderとnot_activeは一時状態でも、Eにはowner/keyがなく安全に相関できません。sessionを破棄し、未送信要求だけを新しい接続で試します。送信されたacquireは自動再送しません。M・L・no_leader・not_activeはcluster modeだけです。- capacity満杯は
EではなくB(busy)です。ownerとkeyをechoして拒否要求を特定できます。
バイト表記:
opはASCII文字、reasonはASCIIテキスト(可変長、構造上はNと表記)です。 末尾の\nは0Aです。
フロー
クライアント
サーバー
不正なframe(例: 192B超過)
E · line_too_long
Eをflush後に接続を閉じる
送信済みacquireはIndeterminate
リクエストレスポンス
Eは診断情報を観測させますが、安全なstream再利用は許しません。回復可能なcapacity拒否にはowner/keyをechoするB(busy)を使います。