Skip to content

错误码注册表 ​

← 线协议 —— 本页是从线协议 §3 拆出来的查表页,为的是查它时不必读规范。帧格式、15 op 表和版本规则留在那边。

用法:找到码,读 Client action 列,照做。这里不需要从头读到尾。

码只增不复用;已发布码的语义永不变化 —— 见线协议 §4 版本规则。

段落按固定的四段划分:0x0xxx 协议/会话、0x2xxx 元数据、0x4xxx 背压/配额、0x6xxx 复制。由此有两条规矩:BACKPRESSURE / QUOTA_EXCEEDED 落在 0x4xxx 而不是 0x000a/0x000b,让背压与配额码集中在同一段(wire_version=1 尚未发布,无兼容负担);复制占用 0x6001–0x600c。未注册的段一律保留。

0x0xxx —— 协议 / 会话 ​

CodeNameCloses connectionClient action
0x0001BAD_LENGTHyesFix the client
0x0002UNKNOWN_OPyesUpgrade the client / wire_version
0x0003MALFORMED_PAYLOADyesFix the client
0x0004UNSUPPORTED_VERSIONyesUpgrade the client
0x0005NOT_AUTHENTICATEDyesSend CONNECT first
0x0006AUTH_FAILEDyesCheck the token; the server leaks no internal detail
0x0007AUTH_TIMEOUTyesFix the client
0x0008UNKNOWN_TOPICnoDECLARE first, or fix the name (error text carries an actionable hint: run mortarmq topics create first)
0x0009UNKNOWN_PARTITIONnoFix the client
0x000aINTERNALnoFile an issue with the diagnostic code
0x000BINVALID_TOPICnoFix the topic name (syntax violation: wildcard / empty token / $ prefix / .dlq reserved suffix / over-long)
0x0010SEQ_GAPnoPublish the missing gap or reset the producer
0x0011SEQ_EXPIREDnoRe-register the producer
0x0012PRODUCER_EPOCH_STALEnoRediscover the leader / epoch
0x0013PRODUCER_SEQ_INVALIDnoFix the client
0x0020STALE_GENERATIONnoWait for NOTICE, then renegotiate
0x0021NOT_OWNERnoStop operating on that partition; wait for assignment
0x0022STALE_OWNERnoRe-issue SUB/PULL
0x0023UNKNOWN_DELIVERYnoIdempotent no-op
0x0024GROUP_MEMBER_LIMITnoShrink the group (v0 ≤ 10)
0x0025GROUP_ASSIGNMENT_LIMITnoShrink subscriptions
0x0026UNKNOWN_MEMBERnoRejoin
0x0027MAX_WAITING_PULLSnoWait for in-flight PULLs
0x0030DLQ_PATH_OVERFLOWnoEnters quarantine; manual intervention
0x0031DLQ_UNAVAILABLEnoBack off and retry (source is not dropped)

0x2xxx —— 元数据 ​

CodeNameClient action
0x2001TOPIC_EXISTS_MISMATCHSame name, different config — fix the parameters or pick another name
0x2002GROUP_EXISTS_MISMATCHSame (for groups)
0x2003METADATA_READ_ONLYFailover/quarantine in progress; retry later (honest boundary)
0x2004METADATA_QUARANTINEDManual handling (RB-2)
0x2005UNKNOWN_GROUPSUB first to create the group
0x2006MUTATION_FENCEDmutation_id/epoch expired; reissue the mutation
0x2007MUTATION_NOT_PACKABLE变更集超出单条打包日志记录;拆分为多次变更提交

0x4xxx —— 背压 / 配额 ​

CodeNameCloses connectionClient action
0x4001BACKPRESSUREnoBack off and retry (formerly 0x000a)
0x4002QUOTA_EXCEEDEDnoSlow down (formerly 0x000b)
0x4003RATE_LIMITEDnoBack off and retry
0x4004STORAGE_HIGH_WATERMARKnoRetry later; consumers are unaffected
0x4005MESSAGE_EXCEEDS_CREDITnoRaise credit_bytes
0x4006NO_CREDITnoSend CREDIT
0x4007SLOW_CONSUMERyesReduce consumer lag / reconnect

0x6xxx —— 复制(0x6001–0x600c) ​

码名称断连客户端动作
0x6001QUORUM_LOSTno停止写入;等恢复(/healthz 状态告诉你在哪一级)
0x6002READ_ONLY_DEGRADEDno稍后重试;读路径继续
0x6003IN_SYNC_REPLICAS_NOT_ENOUGHno等待;运维先修好 follower 再恢复写入(RB-1)
0x6004FOLLOWER_LAGno仅警告;继续
0x6005STALE_LEADER_EPOCHno重新发现 leader / epoch
0x6006LEASE_EXPIREDno新 leader 稳定后重试
0x6007CATCHUP_REQUIREDno等 follower 追平
0x6008LOG_GAPno运维路径(RB-1);勿盲目重试
0x6009DIVERGENT_COMMITTEDno从审计日志人工对账(RB-1 level −2)
0x600aQUORUM_RECOVEREDno提示性;写入恢复
0x600bUNCLEAN_ELECTION_REJECTEDno设计上拒绝;重试无解
0x600cELECTION_TIMEOUTno本轮无 quorum,下轮重试

注册规则 ​

  • 四个已注册段(0x0xxx / 0x2xxx / 0x4xxx / 0x6xxx);其余段一律保留,不得使用。
  • 新增码是纯追加;修改或复用已发布码是禁止的(线协议 §4)。
  • 错误文案必须可行动 —— 要告诉运维该跑哪条命令、做哪个修复,且绝不泄露内部细节(威胁模型里 AUTH_FAILED 的纪律)。