{"record":{"id":"83a04483c4fcc2d5","repo":"jaegertracing/jaeger","slug":"s-w-83a044","errorCode":null,"errorMessage":"%s: %w","messagePattern":"%s: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/storage/v2/grpc/tracereader.go","lineNumber":202,"sourceCode":"\t\t\tfoundTraceIDs[i] = tracestore.FoundTraceID{\n\t\t\t\tTraceID: pcommon.TraceID(sizedTraceID),\n\t\t\t\tStart:   foundTraceID.Start,\n\t\t\t\tEnd:     foundTraceID.End,\n\t\t\t}\n\t\t}\n\t\tyield(foundTraceIDs, nil)\n\t}\n}\n\nfunc (tr *TraceReader) FindTraceSummaries(\n\tctx context.Context,\n\tparams tracestore.TraceQueryParams,\n) iter.Seq2[[]tracestore.TraceSummary, error] {\n\tmaybeNotImplemented := func(err error, msg string) error {\n\t\tif status.Code(err) == codes.Unimplemented || errors.Is(err, errors.ErrUnsupported) {\n\t\t\treturn fmt.Errorf(\"remote server does not support FindTraceSummaries: %w\", errors.ErrUnsupported)\n\t\t}\n\t\treturn fmt.Errorf(\"%s: %w\", msg, err)\n\t}\n\treturn func(yield func([]tracestore.TraceSummary, error) bool) {\n\t\tquery, err := toProtoQueryParameters(params)\n\t\tif err != nil {\n\t\t\tyield(nil, err)\n\t\t\treturn\n\t\t}\n\t\tstream, err := tr.client.FindTraceSummaries(ctx, &storage.FindTraceSummariesRequest{Query: query})\n\t\tif err != nil {\n\t\t\tyield(nil, maybeNotImplemented(err, \"failed to execute FindTraceSummaries\"))\n\t\t\treturn\n\t\t}\n\t\tfor {\n\t\t\tresp, err := stream.Recv()\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif err != nil {","sourceCodeStart":184,"sourceCodeEnd":220,"githubUrl":"https://github.com/jaegertracing/jaeger/blob/806f4447841ecdb60519f408b004a599d515f437/internal/storage/v2/grpc/tracereader.go#L184-L220","documentation":"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.","triggerScenarios":"Calling FindTraceSummaries when the gRPC call fails with Unavailable, DeadlineExceeded, InvalidArgument (bad query), or when toProtoQueryParameters fails to convert the filter.","commonSituations":"Server down or restarting; oversized time-range queries hitting deadlines; unsupported filter expressions rejected by conversion; network issues.","solutions":["Read the %w-wrapped underlying error and its gRPC status","Validate/limit the TraceQueryParams (time range, filter complexity)","Retry on transient codes.Unavailable with backoff","Distinguish from ErrUnsupported before assuming the feature is missing"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"if params.StartTimeMax.Sub(params.StartTimeMin) > maxRange { return errors.New(\"time range too large\") }","typeGuard":null,"tryCatchPattern":"_, err := reader.FindTraceSummaries(ctx, params)(func(batch []tracestore.TraceSummary, err error) bool { ... })\n// on err: check errors.Is(err, errors.ErrUnsupported) first, else inspect status.Code(err)","preventionTips":["Check ErrUnsupported before generic handling so real errors aren't mistaken for missing features","Validate filter expressions before query","Bound query ranges and deadlines","Log the %w-wrapped cause for diagnosis"],"tags":["grpc","trace-reader","query"],"backgroundTag":"grpc-rpc-failed","analyzedSha":"806f4447841ecdb60519f408b004a599d515f437","analyzedAt":"2026-09-01T02:39:22.140Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}