Skip to content

Error Code Registry ​

← Protocol — this page is the look-up table split out of Protocol §3, so it can be consulted without reading the spec. Frame format, the 15-op table and versioning rules stay there.

How to use this page: find the code, read the Client action column, do that. Nothing here needs to be read end to end.

Codes only grow and are never reused; the semantics of a published code never change — see Protocol §4 Versioning Rules.

Segments follow a fixed four-way split: 0x0xxx protocol/session, 0x2xxx metadata, 0x4xxx backpressure/quota, 0x6xxx replication. Two rules follow from it: BACKPRESSURE / QUOTA_EXCEEDED sit in 0x4xxx rather than 0x000a/0x000b, so every backpressure and quota code shares one segment (wire_version=1 is unreleased, so there is no compatibility burden); and replication occupies 0x6001–0x600c. Unregistered segments are all reserved.

0x0xxx — protocol / session ​

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 — metadata ​

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_PACKABLEthe op set exceeds one packed journal record; submit separate mutations

0x4xxx — backpressure / quota ​

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 — replication (0x6001–0x600c) ​

CodeNameCloses connectionClient action
0x6001QUORUM_LOSTnoStop writing; wait for recovery (the /healthz state tells you which level)
0x6002READ_ONLY_DEGRADEDnoRetry later; reads continue
0x6003IN_SYNC_REPLICAS_NOT_ENOUGHnoWait; the operator repairs the follower before writes resume (RB-1)
0x6004FOLLOWER_LAGnoWarning only; keep going
0x6005STALE_LEADER_EPOCHnoRediscover the leader / epoch
0x6006LEASE_EXPIREDnoRetry after the new leader settles
0x6007CATCHUP_REQUIREDnoWait for the follower to catch up
0x6008LOG_GAPnoOperator path (RB-1); do not retry blindly
0x6009DIVERGENT_COMMITTEDnoManual reconcile from the audit logs (RB-1 level −2)
0x600aQUORUM_RECOVEREDnoInformational; writes resume
0x600bUNCLEAN_ELECTION_REJECTEDnoRefused by design; no retry unblocks it
0x600cELECTION_TIMEOUTnoNo quorum this round; retry in the next round

Registration rules ​

  • Four registered segments (0x0xxx / 0x2xxx / 0x4xxx / 0x6xxx); every other segment is reserved and must not be used.
  • Adding a code is additive; changing or reusing a published code is forbidden (Protocol §4).
  • Error text must be actionable — it tells the operator which command or fix to run, and never leaks internal detail (the AUTH_FAILED discipline in the threat model).