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

  1. Verify the stream name matches exactly (NATS stream names are case-sensitive) via `nats stream ls`.
  2. Create the stream first (CreateStream/CreateOrUpdateStream) before getting a handle to it.
  3. Confirm you're connected to the intended server/account that hosts the stream.
  4. 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

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


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