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
- Check the stream exists before deleting (`nats stream ls`) and treat not-found as success in idempotent cleanup.
- Verify the user/account has JetStream admin permissions to delete streams.
- Confirm the connection is alive and you are deleting on the right server/account (check servers/credentials config).
- 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
- Treat not-found as success in teardown/cleanup code.
- Verify stream names against `nats stream ls` for the target account.
- Ensure the deleting identity has JetStream admin permissions.
- Scope deletes to the correct server/account per environment.
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
- create stream error
- get stream error
- create or update stream error
- publish error
- jStream is not configured
AI-assisted analysis of gofr-dev/gofr@187eb24962 (2026-09-01).
Data as JSON: /api/errors/d3e79c646d1d55d7.
Report an issue: GitHub.