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

  1. Request a full purge (fseq 0) or a sequence at/after LastSeq on memory streams
  2. 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.