nats-io/nats-server · error

sealed stream

Error message

sealed stream

What it means

A mutating operation (e.g. purge) was attempted on a sealed stream. Sealed streams are immutable by definition, so the request is rejected while holding the stream lock. The stream's sealed state combined with the attempted mutation is the cause.

Source

Thrown at server/stream.go:3101

// Purge will remove all messages from the stream and underlying store based on the request.
func (mset *stream) purge(preq *JSApiStreamPurgeRequest) (purged uint64, err error) {
	// Purges mutate message state, so hold the isolation lock like any other
	// write so direct get requests don't observe a partially applied purge.
	mset.isolateMu.Lock()
	defer mset.isolateMu.Unlock()
	return mset.purgeLocked(preq, true)
}

func (mset *stream) purgeLocked(preq *JSApiStreamPurgeRequest, needLock bool) (purged uint64, err error) {
	if needLock {
		mset.mu.Lock()
		defer mset.mu.Unlock()
	}
	if mset.closed.Load() {
		return 0, errStreamClosed
	}
	if mset.cfg.Sealed {
		return 0, errors.New("sealed stream")
	}
	store, mlseq := mset.store, mset.lseq

	if preq != nil {
		purged, err = mset.store.PurgeEx(preq.Subject, preq.Sequence, preq.Keep)
	} else {
		purged, err = mset.store.Purge()
	}
	if err != nil {
		return purged, err
	}

	// Grab our stream state.
	var state StreamState
	store.FastState(&state)
	fseq, lseq := state.FirstSeq, state.LastSeq

	// Check if our last has moved past what our original last sequence was, if so reset.

View on GitHub (pinned to 3a66a489d2)

Solutions

  1. Unseal the stream (if supported) before mutating it
  2. Delete and recreate the stream if data changes are required
  3. Skip purge and message-delete operations on sealed streams
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/stream.go:3101 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/ac9884db74a05a89. Report an issue: GitHub.