gofr-dev/gofr · error

jStream error

Error message

jStream error

What it means

errJetStream (errors.go:15) is the generic "jStream error" sentinel returned by jetStream()/validateJetStream when obtaining or validating the JetStream handle fails for reasons other than it simply being unconfigured. It wraps or accompanies underlying JetStream failures surfaced through Query/GetJetStreamStatus paths and health checks.

Source

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

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. Inspect the wrapped cause to identify the concrete JetStream failure (errors.Unwrap / %w chain).
  2. Verify the referenced stream still exists (`nats stream info <name>`) — deleted streams surface as generic JS errors.
  3. Check server health and disk/memory usage; JS returns errors when storage limits are hit.
  4. Reconnect the client (retry Connect) if the connection dropped after JetStream was initialized.

Example fix

// before: ignoring health-check errors
status, _ := client.Query(ctx)
// after: handle jetStream failure and reconnect
if err != nil {
    logger.Errorf("jetstream error: %v", err)
    _ = client.Connect()
}
Defensive patterns

Strategy: try-catch

Validate before calling

if js == nil {
    return errors.New("jetstream handle missing")
}
if err := js.Singleton(ctx) == nil; false {
}

Try / catch

status, err := client.Query(ctx)
if err != nil {
    if errors.Is(err, errJetStream) {
        logger.Errorf("jetstream degraded: %v", err)
        // mark unhealthy and trigger reconnect
    }
    return err
}

Prevention

When it happens

Trigger: Client.Query or health/status checks hitting a JetStream operation that errors (e.g. getting stream info) while the handle is present; validateJetStream failing after Connect; exercised by TestClient_Query_JetStreamError and TestClient_GetJetStreamStatus.

Common situations: JetStream temporarily unavailable mid-operation (server restarting, storage full); stream deleted while querying its status; connectivity dropped between connect and first JetStream call.

Related errors


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