nats-io/nats-server · error
partial purges not supported on memory store
Error message
partial purges not supported on memory store
What it means
Returned by memStore.purge when a purge request carries an fseq lower than the current LastSeq, i.e. a request to purge only messages up to a sequence already below the stream state. The in-memory store does not support partial (mid-stream) purges, unlike the file store.
Source
Thrown at server/memstore.go:1675
return purged, nil
}
// Purge will remove all messages from this store.
// Will return the number of purged messages.
func (ms *memStore) Purge() (uint64, error) {
return ms.purge(0)
}
func (ms *memStore) purge(fseq uint64) (uint64, error) {
ms.mu.Lock()
purged := uint64(len(ms.msgs))
cb := ms.scb
bytes := int64(ms.state.Bytes)
if fseq == 0 {
fseq = ms.state.LastSeq + 1
} else if fseq < ms.state.LastSeq {
ms.mu.Unlock()
return 0, fmt.Errorf("partial purges not supported on memory store")
}
ms.state.FirstSeq = fseq
ms.state.LastSeq = fseq - 1
ms.state.FirstTime = time.Time{}
ms.state.Bytes = 0
ms.state.Msgs = 0
if ms.msgs != nil {
ms.msgs = make(map[uint64]*StoreMsg)
}
ms.fss = stree.NewSubjectTree[SimpleState]()
ms.dmap.Empty()
ms.sdm.empty()
ms.mu.Unlock()
if cb != nil {
cb(-int64(purged), -bytes, 0, _EMPTY_)
}
View on GitHub (pinned to 3a66a489d2)
Solutions
- Request a full purge (fseq 0) or a sequence at/after LastSeq on memory streams
- Route partial-purge semantics only to file-backed streams
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/memstore.go:1675 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/e39f9b6da3de553f.
Report an issue: GitHub.