gofr-dev/gofr · error
get stream error
Error message
get stream error
What it means
errGetStream (errors.go:18) is returned by StreamManager.GetStream when looking up a stream handle via jetstream.Stream fails — typically the stream does not exist or the JetStream context is invalid. Exercised by TestStreamManager_GetStream_Error.
Source
Thrown at pkg/gofr/datasource/pubsub/nats/errors.go:18
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
- Verify the stream name matches exactly (NATS stream names are case-sensitive) via `nats stream ls`.
- Create the stream first (CreateStream/CreateOrUpdateStream) before getting a handle to it.
- Confirm you're connected to the intended server/account that hosts the stream.
- Handle the not-found case explicitly in your flow instead of treating it as a fatal error.
Example fix
// before: get stream that may not exist yet
s, err := sm.GetStream(ctx, "ORDERS")
// after: ensure it exists first
if _, err := sm.GetStream(ctx, "ORDERS"); err != nil {
err = sm.CreateOrUpdateStream(ctx, &jetstream.StreamConfig{Name: "ORDERS", Subjects: []string{"orders.>"}})
} Defensive patterns
Strategy: validation
Validate before calling
if name == "" {
return errors.New("stream name required")
}
if _, err := js.Stream(ctx, name); err != nil {
return fmt.Errorf("stream %q not found; create it first", name)
} Try / catch
s, err := sm.GetStream(ctx, name)
if err != nil {
if errors.Is(err, jetstream.ErrStreamNotFound) {
return sm.CreateOrUpdateStream(ctx, defaultCfg(name))
}
return err
} Prevention
- Run stream provisioning before consumer/subscription setup.
- Keep stream names in constants/config, never inline strings.
- Remember names are case-sensitive.
- Add an integration check that the expected stream exists at startup.
When it happens
Trigger: Calling StreamManager.GetStream for a stream name that was never created or was deleted; JetStream unavailable; wrong account lacking access to the stream.
Common situations: Consumer setup code fetching a stream before the provisioning step ran; typo'd stream name (case-sensitive); multi-environment setups querying a stream that exists only in staging.
Related errors
- create stream error
- delete 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/cc4066828105c00c.
Report an issue: GitHub.