目前正在测试中:完成后将开放 GitHub 代码。

E · 错误 (Error)

结构refresh

请求无法处理时返回。key的位置改为原因文本(reason)。不会echo key,因此pipeline中仅凭frame无法确定失败的是哪个请求。所以所有E都是connection-fatal。服务器尽可能flush E后关闭连接,官方客户端也丢弃该session。只要acquire已发送一个byte却没有确定响应,就不得推定成功或失败,而应结束为Indeterminate

reason原因连接
auth_failed认证握手摘要不匹配关闭
bad_op未知的 op 代码关闭
bad_request固定header不足(A为10 bytes,R为8 bytes)关闭
bad_leaselease0251..255关闭
bad_keykey 缺失 / 超过 128 字节 / 包含空白或换行 / 非 UTF-8关闭
line_too_long帧超过 192 字节关闭
no_leader(集群模式)当前 leader 未知 —— 选举正在进行中,请稍后重试关闭
not_active节点无法提供服务 —— 正在关闭中关闭
  • 这8种原因是完整列表,全部关闭连接。raw client可用于诊断,但不得重新同步并复用同一stream。
  • 官方客户端发送前验证key与时间范围,因此bad_*不是正常API结果。
  • no_leadernot_active虽是临时状态,但E没有owner/key,无法安全关联。丢弃session;只有尚未发送的请求可在新连接尝试。不得自动重发已发送的acquire。
  • MLno_leadernot_active只出现在cluster mode。
  • capacity满时使用B(busy)而非E,因为它echo owner与key。

字节表示法: op 是 ASCII 字符,reason 是 ASCII 文本(变长,在结构中以 N 表示)。末尾的 \n0A

流程

客户端
服务器
错误frame(如超过192B)
E · line_too_long
flush E后关闭连接
已发送的acquire为Indeterminate
请求响应

E允许观察诊断信息,但不允许安全复用stream。可恢复的capacity拒绝使用echo owner与key的B(busy)