jaegertracing/jaeger · error
failed to execute GetServices: %w
Error message
failed to execute GetServices: %w
What it means
TraceReader.GetServices wraps any error from the remote GetServices RPC with 'failed to execute GetServices'. It means the list of service names could not be fetched from the remote storage backend.
Source
Thrown at internal/storage/v2/grpc/tracereader.go:111
yield(nil, fmt.Errorf("failed to execute GetTraces: %w", err))
return
}
for received, err := stream.Recv(); !errors.Is(err, io.EOF); received, err = stream.Recv() {
if err != nil {
yield(nil, fmt.Errorf("received error from grpc stream: %w", err))
return
}
if !yield([]ptrace.Traces{received.ToTraces()}, nil) {
return
}
}
}
}
func (tr *TraceReader) GetServices(ctx context.Context) ([]string, error) {
resp, err := tr.client.GetServices(ctx, &storage.GetServicesRequest{})
if err != nil {
return nil, fmt.Errorf("failed to execute GetServices: %w", err)
}
return resp.Services, nil
}
func (tr *TraceReader) GetOperations(
ctx context.Context,
params tracestore.OperationQueryParams,
) ([]tracestore.Operation, error) {
resp, err := tr.client.GetOperations(ctx, &storage.GetOperationsRequest{
Service: params.ServiceName,
SpanKind: params.SpanKind,
})
if err != nil {
return nil, fmt.Errorf("failed to execute GetOperations: %w", err)
}
operations := make([]tracestore.Operation, len(resp.Operations))
for i, op := range resp.Operations {
operations[i] = tracestore.Operation{View on GitHub (pinned to 806f444784)
Solutions
- Inspect the wrapped gRPC status code for the root cause
- Verify remote storage connectivity and endpoint configuration
- Ensure the storage plugin implements GetServices (upgrade if stale)
- Retry on transient codes (Unavailable, DeadlineExceeded) with backoff
Example fix
// before
services, err := reader.GetServices(ctx)
if err != nil { return err }
// after
services, err := reader.GetServices(ctx)
if err != nil {
if status.Code(err) == codes.Unavailable { return retry(...) }
return err
} Defensive patterns
Strategy: retry
Try / catch
services, err := reader.GetServices(ctx)
if err != nil {
if status.Code(err) == codes.Unavailable {
// retry with backoff or serve cached service list
}
return err
} Prevention
- Cache the service list with a short TTL to ride out transient failures
- Health-check the remote storage endpoint
- Verify plugin implements GetServices in your version
When it happens
Trigger: Calling GetServices when the gRPC call fails: server unreachable, unimplemented method, deadline exceeded, or auth/tenancy rejection.
Common situations: Remote storage not running or endpoint misconfigured; server built from an older version lacking GetServices; query UI's service dropdown failing on page load due to network issues.
Related errors
- error reading service_names from storage: %w
- failed to get dependencies: %w
- ErrUnsupported
- failed to execute GetOperations: %w
- failed to execute FindTraceIDs: %w
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/ac5fdbaab2ffd4fe.
Report an issue: GitHub.