jaegertracing/jaeger · error
failed to execute GetOperations: %w
Error message
failed to execute GetOperations: %w
What it means
TraceReader.GetOperations wraps any error returned by the remote storage gRPC client's GetOperations RPC with this message. It means the call to list service operations (name + span kind pairs) failed at the transport, serialization, or remote-server level. The library re-wraps rather than returns the raw error so callers can tell which storage operation failed.
Source
Thrown at internal/storage/v2/grpc/tracereader.go:125
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{
Name: op.Name,
SpanKind: op.SpanKind,
}
}
return operations, nil
}
func (tr *TraceReader) FindTraces(
ctx context.Context,
params tracestore.TraceQueryParams,
) iter.Seq2[[]ptrace.Traces, error] {
return func(yield func([]ptrace.Traces, error) bool) {
query, err := toProtoQueryParameters(params)
if err != nil {View on GitHub (pinned to 806f444784)
Solutions
- Check connectivity to the remote storage server (address, port, DNS) with grpc health/healthz probe
- Inspect the wrapped %w error for its gRPC status code and fix the specific cause (timeout, auth, unimplemented)
- Increase context deadline or client timeout if DeadlineExceeded
- Verify client credentials/TLS configuration match the server
- Ensure the remote server runs a version supporting the v2 GetOperations API
Example fix
// before
ops, err := reader.GetOperations(ctx, params) // err: failed to execute GetOperations: rpc error: DeadlineExceeded
// after
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
ops, err := reader.GetOperations(ctx, params)
if err != nil {
if status.Code(errors.Unwrap(err)) == codes.Unimplemented { /* upgrade server or fallback */ }
} Defensive patterns
Strategy: try-catch
Validate before calling
if params.ServiceName == "" { return errors.New("ServiceName is required for GetOperations") }
if err := grpcHealthCheck(ctx, conn); err != nil { return fmt.Errorf("storage server unreachable: %w", err) } Try / catch
ops, err := reader.GetOperations(ctx, params)
if err != nil {
if status.Code(err) == codes.Unimplemented { /* older server: fallback */ }
return fmt.Errorf("GetOperations failed: %w", err)
} Prevention
- Health-check the remote storage connection at startup
- Set realistic per-call deadlines
- Pin server/client versions to compatible releases
- Log the unwrapped gRPC status for triage
When it happens
Trigger: Calling traceReader.GetOperations(ctx, tracestore.OperationQueryParams{...}) when the remote gRPC server is unreachable, returns a non-OK status (Unavailable, DeadlineExceeded, PermissionDenied, Unimplemented for older servers), or the context is cancelled/times out.
Common situations: Remote storage adapter address misconfigured; server restarted or network partition; per-RPC deadline too short; remote Jaeger version predates the v2 storage API and returns Unimplemented; TLS/mTLS credentials mismatch.
Related errors
- failed to execute FindTraceIDs: %w
- failed to get dependencies: %w
- ErrUnsupported
- failed to execute GetServices: %w
- failed to execute FindTraces: %w
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/e8b58a91c105c633.
Report an issue: GitHub.