nats-io/nats-server · error
failed to read message sequence %d: %w
Error message
failed to read message sequence %d: %w
What it means
Emitted during restore when reading the actual message bytes for the given sequence from the tar stream fails (I/O error, short read, or decompression failure), with the underlying error wrapped. The header was already validated, so this points to a truncated or damaged archive body rather than bad metadata.
Source
Thrown at server/stream_backup.go:504
case MemoryStorage:
storedSizeRaw = memStoreMsgSizeRaw(len(hdr.Name), int(hdr.HeaderSize), int(hdr.PayloadSize))
default:
storedSizeRaw = fileStoreMsgSizeRaw(len(hdr.Name), int(hdr.HeaderSize), int(hdr.PayloadSize))
}
if storedSizeRaw > math.MaxInt64 {
return nil, fmt.Errorf("snapshot message bytes exceed reserved restore size")
}
storedSize := int64(storedSizeRaw)
if additional := storedSize - restoreRemaining; additional > 0 {
jsa.updateUsage(tier, cfg.Storage, additional)
restoreRemaining += additional
if err := checkUsageLimits(); err != nil {
return nil, err
}
}
buf, err := io.ReadAll(tr)
if err != nil {
return nil, fmt.Errorf("failed to read message sequence %d: %w", seq, err)
}
if hdr.HeaderSize > int64(len(buf)) {
return nil, fmt.Errorf("failed to parse message sequence %d: invalid header length", seq)
}
if int64(len(buf)) != declaredSize {
return nil, fmt.Errorf("failed to read message sequence %d: unexpected payload size", seq)
}
subj := hdr.Name
mhdr := buf[:hdr.HeaderSize]
msg := buf[hdr.HeaderSize : hdr.HeaderSize+hdr.PayloadSize]
if seq <= lseq {
return nil, fmt.Errorf("message sequence %d out of order", seq)
}
// We could have deleted messages since the last message we stored, if so
// we should work out what the gap is and skip those sequences.
if gap := seq - lseq - 1; gap > 0 {
if err := store.SkipMsgs(lseq+1, gap); err != nil {
return nil, fmt.Errorf("failed to process gap: %w", err)View on GitHub (pinned to 3a66a489d2)
Solutions
- Verify the archive's integrity (checksum) and completeness after transfer
- Re-create the backup and retry the restore
- Check for disk/network issues on the restore host that could cause short reads
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at server/stream_backup.go:504 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of nats-io/nats-server@3a66a489d2 (2026-09-02).
Data as JSON: /api/errors/2c6bf272d96f7467.
Report an issue: GitHub.