{"record":{"id":"ff0abc676d9ba6f9","repo":"nats-io/nats-server","slug":"expected-message-sequence","errorCode":null,"errorMessage":"expected message sequence","messagePattern":"expected message sequence","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/stream_backup.go","lineNumber":472,"sourceCode":"\t}\n\n\tstore := mset.store\n\tlseq := nstate.FirstSeq - 1\n\teob := false\n\tmp := int64(s.getOpts().MaxPayload)\n\tfor {\n\t\thdr, err := tr.Next()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tseq := hdr.Sequence\n\t\tif seq == 0 {\n\t\t\t// Sentinel \"end of backup\" if all fields are zero.\n\t\t\tif hdr.Timestamp == 0 && hdr.HeaderSize == 0 && hdr.PayloadSize == 0 {\n\t\t\t\teob = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"expected message sequence\")\n\t\t}\n\t\tif hdr.HeaderSize < 0 || hdr.PayloadSize < 0 || hdr.PayloadSize > math.MaxInt64-hdr.HeaderSize {\n\t\t\treturn nil, fmt.Errorf(\"invalid message lengths for sequence %d\", seq)\n\t\t}\n\t\tdeclaredSize := hdr.HeaderSize + hdr.PayloadSize\n\t\tif hdr.HeaderSize > mp || hdr.PayloadSize > mp-hdr.HeaderSize {\n\t\t\treturn nil, fmt.Errorf(\"message sequence %d exceeds maximum payload size\", seq)\n\t\t}\n\t\tif mms := int64(cfg.MaxMsgSize); mms >= 0 && (hdr.HeaderSize > mms || hdr.PayloadSize > mms-hdr.HeaderSize) {\n\t\t\treturn nil, fmt.Errorf(\"message sequence %d exceeds maximum message size\", seq)\n\t\t}\n\t\tvar storedSizeRaw uint64\n\t\tswitch cfg.Storage {\n\t\tcase MemoryStorage:\n\t\t\tstoredSizeRaw = memStoreMsgSizeRaw(len(hdr.Name), int(hdr.HeaderSize), int(hdr.PayloadSize))\n\t\tdefault:\n\t\t\tstoredSizeRaw = fileStoreMsgSizeRaw(len(hdr.Name), int(hdr.HeaderSize), int(hdr.PayloadSize))\n\t\t}","sourceCodeStart":454,"sourceCodeEnd":490,"githubUrl":"https://github.com/nats-io/nats-server/blob/3a66a489d262bf89b71a71c955c94920394532f3/server/stream_backup.go#L454-L490","documentation":"Validation guard in the restore message loop: a message header arrived with Sequence == 0, but it was not the all-zero end-of-backup sentinel (Timestamp, HeaderSize, PayloadSize all zero). Sequence zero is reserved for the sentinel, so any other zero-sequence header indicates a corrupted, truncated, or incompatible backup archive.","triggerScenarios":"Thrown at server/stream_backup.go:472 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Regenerate the backup archive and verify its transfer integrity (checksums)","Restore with the same server version that created the archive","Inspect the tar stream around the failing entry to confirm the header encoding is intact"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3a66a489d262bf89b71a71c955c94920394532f3","analyzedAt":"2026-09-02T04:41:54.247Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}