nats-io/nats-server · error
Error writing peer state file for %q: %v
Error message
Error writing peer state file for %q: %v
What it means
writePeerState failed to persist the peers.idx file (encoded peer membership) for this RAFT group; the error was also latched via setWriteErrLocked. The in-memory n.wps is already updated, so disk state may diverge from memory until a successful rewrite.
Source
Thrown at server/raft.go:5390
lastIndex: le.Uint64(msg[16:]),
candidate: string(copyBytes(msg[24 : 24+idLen])),
reply: reply,
}
}
const peerStateFile = "peers.idx"
// Lock should be held.
func (n *raft) writePeerState(ps *peerState) {
pse := encodePeerState(ps)
if bytes.Equal(n.wps, pse) {
return
}
// Stamp latest and write the peer state file.
n.wps = pse
if err := writePeerState(n.dios, n.sd, ps); err != nil && !n.isClosed() {
n.setWriteErrLocked(err)
n.warn("Error writing peer state file for %q: %v", n.group, err)
}
}
// Writes out our peer state outside of a specific raft context.
func writePeerState(dios *diskIOSemaphore, sd string, ps *peerState) error {
psf := filepath.Join(sd, peerStateFile)
if _, err := os.Stat(psf); err != nil && !os.IsNotExist(err) {
return err
}
return writeFileWithSync(dios, psf, encodePeerState(ps), defaultFilePerms)
}
func readPeerState(dios *diskIOSemaphore, sd string) (ps *peerState, err error) {
dios.acquire()
buf, err := os.ReadFile(filepath.Join(sd, peerStateFile))
dios.release()
if err != nil {View on GitHub (pinned to 3a66a489d2)
Solutions
- Check write permissions and disk space in the RAFT store dir
- The next successful peer-state change will retry the write since wtv-style caching still forces a rewrite on failure
- Restart after fixing storage so peer state is re-persisted
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at server/raft.go:5390 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/a2baa9e1f873cb7b.
Report an issue: GitHub.