gofr-dev/gofr · error

delete stream error

Error message

delete stream error

What it means

errDeleteStream (errors.go:17) is returned by StreamManager.DeleteStream when jetstream.DeleteStream fails — the stream could not be deleted from the server (not found, permissions, or connectivity). Related sentinel errFailedToDeleteStream exists for the client-level path. Exercised by TestStreamManager_DeleteStream_Error.

Source

Thrown at pkg/gofr/datasource/pubsub/nats/errors.go:17

package nats

import "errors"

var (
	// Client Errors.
	errServerNotProvided       = errors.New("client server address not provided")
	errSubjectsNotProvided     = errors.New("subjects not provided")
	errConsumerNotProvided     = errors.New("consumer name not provided")
	errConsumerCreationError   = errors.New("consumer creation error")
	errFailedToDeleteStream    = errors.New("failed to delete stream")
	errPublishError            = errors.New("publish error")
	errJetStreamNotConfigured  = errors.New("jStream is not configured")
	errJetStreamCreationFailed = errors.New("jStream creation failed")
	errJetStream               = errors.New("jStream error")
	errCreateStream            = errors.New("create stream error")
	errDeleteStream            = errors.New("delete stream error")
	errGetStream               = errors.New("get stream error")
	errCreateOrUpdateStream    = errors.New("create or update stream error")
	errHandlerError            = errors.New("handler error")
	errConnectionError         = errors.New("connection error")
	errSubscriptionError       = errors.New("subscription error")
)

View on GitHub (pinned to 187eb24962)

Solutions

  1. Check the stream exists before deleting (`nats stream ls`) and treat not-found as success in idempotent cleanup.
  2. Verify the user/account has JetStream admin permissions to delete streams.
  3. Confirm the connection is alive and you are deleting on the right server/account (check servers/credentials config).
  4. Inspect the wrapped NATS error for the exact API failure code.

Example fix

// before: unconditional delete fails on missing stream
err := sm.DeleteStream(ctx, "ORDERS")
// after: idempotent teardown
if _, serr := js.Stream(ctx, "ORDERS"); serr == nil {
    err = sm.DeleteStream(ctx, "ORDERS")
}
Defensive patterns

Strategy: validation

Validate before calling

if _, err := js.Stream(ctx, name); err != nil {
    return nil // stream already gone; delete is a no-op
}

Try / catch

if err := sm.DeleteStream(ctx, name); err != nil {
    if errors.Is(err, jetstream.ErrStreamNotFound) {
        return nil // idempotent cleanup
    }
    return err
}

Prevention

When it happens

Trigger: Calling StreamManager.DeleteStream with a stream name that does not exist, a connection that has dropped, or without JetStream delete permissions.

Common situations: Cleanup/teardown code deleting an already-removed stream; environment mismatch (deleting a stream provisioned in another account); operator revoked delete permissions.

Related errors


AI-assisted analysis of gofr-dev/gofr@187eb24962 (2026-09-01). Data as JSON: /api/errors/d3e79c646d1d55d7. Report an issue: GitHub.