jaegertracing/jaeger · error

%s: %w

Error message

%s: %w

What it means

This is the generic branch of FindTraceSummaries' maybeNotImplemented wrapper: any error that is NOT codes.Unimplemented/ErrUnsupported is wrapped as '%s: %w' with a contextual message. It means FindTraceSummaries failed for a real (non-capability) reason such as transport failure, bad query parameters, or deadline exceeded.

Source

Thrown at internal/storage/v2/grpc/tracereader.go:202

			foundTraceIDs[i] = tracestore.FoundTraceID{
				TraceID: pcommon.TraceID(sizedTraceID),
				Start:   foundTraceID.Start,
				End:     foundTraceID.End,
			}
		}
		yield(foundTraceIDs, nil)
	}
}

func (tr *TraceReader) FindTraceSummaries(
	ctx context.Context,
	params tracestore.TraceQueryParams,
) iter.Seq2[[]tracestore.TraceSummary, error] {
	maybeNotImplemented := func(err error, msg string) error {
		if status.Code(err) == codes.Unimplemented || errors.Is(err, errors.ErrUnsupported) {
			return fmt.Errorf("remote server does not support FindTraceSummaries: %w", errors.ErrUnsupported)
		}
		return fmt.Errorf("%s: %w", msg, err)
	}
	return func(yield func([]tracestore.TraceSummary, error) bool) {
		query, err := toProtoQueryParameters(params)
		if err != nil {
			yield(nil, err)
			return
		}
		stream, err := tr.client.FindTraceSummaries(ctx, &storage.FindTraceSummariesRequest{Query: query})
		if err != nil {
			yield(nil, maybeNotImplemented(err, "failed to execute FindTraceSummaries"))
			return
		}
		for {
			resp, err := stream.Recv()
			if errors.Is(err, io.EOF) {
				return
			}
			if err != nil {

View on GitHub (pinned to 806f444784)

Solutions

  1. Read the %w-wrapped underlying error and its gRPC status
  2. Validate/limit the TraceQueryParams (time range, filter complexity)
  3. Retry on transient codes.Unavailable with backoff
  4. Distinguish from ErrUnsupported before assuming the feature is missing
Defensive patterns

Strategy: try-catch

Validate before calling

if params.StartTimeMax.Sub(params.StartTimeMin) > maxRange { return errors.New("time range too large") }

Try / catch

_, err := reader.FindTraceSummaries(ctx, params)(func(batch []tracestore.TraceSummary, err error) bool { ... })
// on err: check errors.Is(err, errors.ErrUnsupported) first, else inspect status.Code(err)

Prevention

When it happens

Trigger: Calling FindTraceSummaries when the gRPC call fails with Unavailable, DeadlineExceeded, InvalidArgument (bad query), or when toProtoQueryParameters fails to convert the filter.

Common situations: Server down or restarting; oversized time-range queries hitting deadlines; unsupported filter expressions rejected by conversion; network issues.

Related errors


AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01). Data as JSON: /api/errors/83a04483c4fcc2d5. Report an issue: GitHub.