nats-io/nats-server · error
Error decoding sources state: %s
Error message
Error decoding sources state: %s
What it means
A warning logged by recoverSourcesState() when the sources index file exists but fails to decode. The file is deleted and in-memory sources state reset, so recovery continues with sources sequence tracking restarted rather than failing stream startup.
Source
Thrown at server/filestore.go:12487
}
// Lock should be held.
func (fs *fileStore) recoverSourcesState() uint64 {
// See if we have a sources index file.
fs.dios.acquire()
fn := fs.sourcesStatePath()
buf, err := os.ReadFile(fn)
fs.dios.release()
if err != nil && !os.IsNotExist(err) {
fs.warn("Recovering sources state from index errored: %v", err)
}
var sourcesSeq uint64
if err == nil {
sourcesSeq, err = fs.decodeSourcesState(buf)
if err != nil {
fs.warn("Error decoding sources state: %s", err)
// Remove the file, and reset collected state (if any).
_ = os.Remove(fn)
fs.sources = nil
}
}
if sourcesSeq < fs.state.FirstSeq {
sourcesSeq = fs.state.FirstSeq
}
return sourcesSeq
}
var errSourcesInvalidVersion = errors.New("sources: encoded version not known")
func (fs *fileStore) decodeSourcesState(b []byte) (uint64, error) {
if len(b) < sourcesHeaderLen {
return 0, io.ErrShortBuffer
}View on GitHub (pinned to 3a66a489d2)
Solutions
- The corrupt file is removed automatically; verify it regenerates on next run
- Check the store directory for disk corruption or version-format mismatch
- Re-sync mirror/source streams if sequence continuity was lost
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at server/filestore.go:12487 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/bb2cbf0f673251e6.
Report an issue: GitHub.