{"record":{"id":"a60e922cf9050ac0","repo":"jaegertracing/jaeger","slug":"failed-to-execute-findtraces-w","errorCode":null,"errorMessage":"failed to execute FindTraces: %w","messagePattern":"failed to execute FindTraces: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/storage/v2/grpc/tracereader.go","lineNumber":149,"sourceCode":"\t\t\tSpanKind: op.SpanKind,\n\t\t}\n\t}\n\treturn operations, nil\n}\n\nfunc (tr *TraceReader) FindTraces(\n\tctx context.Context,\n\tparams tracestore.TraceQueryParams,\n) iter.Seq2[[]ptrace.Traces, error] {\n\treturn func(yield func([]ptrace.Traces, 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.FindTraces(ctx, &storage.FindTracesRequest{Query: query})\n\t\tif err != nil {\n\t\t\tyield(nil, fmt.Errorf(\"failed to execute FindTraces: %w\", err))\n\t\t\treturn\n\t\t}\n\t\tfor received, err := stream.Recv(); !errors.Is(err, io.EOF); received, err = stream.Recv() {\n\t\t\tif err != nil {\n\t\t\t\tyield(nil, fmt.Errorf(\"received error from grpc stream: %w\", err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif !yield([]ptrace.Traces{received.ToTraces()}, nil) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (tr *TraceReader) FindTraceIDs(\n\tctx context.Context,\n\tparams tracestore.TraceQueryParams,\n) iter.Seq2[[]tracestore.FoundTraceID, error] {","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/jaegertracing/jaeger/blob/806f4447841ecdb60519f408b004a599d515f437/internal/storage/v2/grpc/tracereader.go#L131-L167","documentation":"TraceReader.FindTraces wraps an error from the initial FindTraces RPC call with this message. The method returns an iterator; if establishing the stream fails, it yields (nil, err) once with this wrapped error instead of traces. It is distinct from mid-stream errors, which use 'received error from grpc stream'.","triggerScenarios":"Calling traceReader.FindTraces(ctx, query) where the client.FindTraces(...) streaming RPC fails immediately: server unreachable, invalid query rejected server-side, method unimplemented, or context deadline exceeded before the stream is established.","commonSituations":"Remote storage backend down; query with invalid/unsupported parameters rejected by server; Unimplemented on old remote servers; network flaps at query start.","solutions":["Check the wrapped error's gRPC status to identify transport vs. application rejection","Validate the TraceQueryParameters (service name, time range, limits) sent to the server","Verify remote server availability and version support for FindTraces","Retry with backoff on codes.Unavailable"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"if query.ServiceName == \"\" && len(query.Attributes) == 0 { return errors.New(\"query too broad; provide a service name\") }","typeGuard":null,"tryCatchPattern":"for traces, err := range reader.FindTraces(ctx, q) {\n    if err != nil {\n        var se *status.Status\n        if status.Code(err) == codes.Unavailable { /* retry */ }\n        return err\n    }\n}","preventionTips":["Validate query params before calling","Keep server version in sync with client API expectations","Use bounded time ranges","Apply retry-with-backoff only for Unavailable codes"],"tags":["grpc","streaming","trace-reader"],"backgroundTag":"grpc-rpc-failed","analyzedSha":"806f4447841ecdb60519f408b004a599d515f437","analyzedAt":"2026-09-01T02:39:22.140Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}