{"record":{"id":"488ca26d9972efd0","repo":"thanos-io/thanos","slug":"aborted-488ca2","errorCode":"Aborted","errorMessage":"fetching exemplars from exemplars client %v","messagePattern":"fetching exemplars from exemplars client (.+?)","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/exemplars/proxy.go","lineNumber":177,"sourceCode":"\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc containsLabelName(name string, sets []labels.Labels) bool {\n\tfor _, ls := range sets {\n\t\tif ls.Get(name) != \"\" {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (stream *exemplarsStream) receive(ctx context.Context) error {\n\texemplars, err := stream.client.Exemplars(ctx, stream.request)\n\tif err != nil {\n\t\terr = errors.Wrapf(err, \"fetching exemplars from exemplars client %v\", stream.client)\n\n\t\tif stream.request.PartialResponseStrategy == storepb.PartialResponseStrategy_ABORT {\n\t\t\treturn err\n\t\t}\n\n\t\tif serr := stream.server.Send(exemplarspb.NewWarningExemplarsResponse(err)); serr != nil {\n\t\t\treturn serr\n\t\t}\n\t\t// Not an error if response strategy is warning.\n\t\treturn nil\n\t}\n\n\tfor {\n\t\texemplar, err := exemplars.Recv()\n\t\tif err == io.EOF {\n\t\t\treturn nil\n\t\t}\n","sourceCodeStart":159,"sourceCodeEnd":195,"githubUrl":"https://github.com/thanos-io/thanos/blob/35b8b991177def87ed52dcf10f9b6d87f07282c8/pkg/exemplars/proxy.go#L159-L195","documentation":"exemplarsStream.receive calls the upstream store's Exemplars RPC and wraps any immediate RPC error with \"fetching exemplars from exemplars client %v\". Under PartialResponseStrategy_ABORT the wrapped error is returned (surfacing as codes.Aborted); otherwise it is forwarded to the client as a warning response and the stream continues.","triggerScenarios":"stream.client.Exemplars(ctx, stream.request) fails at call time — store unreachable, DNS failure, TLS error, storeAPI not supporting the Exemplars method (Unimplemented), or context deadline exceeded during fan-out at pkg/exemplars/proxy.go:177.","commonSituations":"Dead store gateways in the store set, stores running versions without exemplar support, network partition between query and store, per-RPC timeouts too short.","solutions":["Read the wrapped cause and client address in the message; health-check that specific store endpoint.","Upgrade stores that return Unimplemented for the Exemplars method.","If failures are tolerable, use a non-ABORT partial-response strategy so it degrades to a warning.","Remove or repair unreachable stores from the store set."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"data, warnings, err := api.Exemplars(ctx, req)\nif err != nil {\n\t// store unreachable: degrade to empty result + alert instead of failing the page\n\tlog.Warnf(\"exemplars unavailable: %v\", err)\n\treturn nil, err\n}","preventionTips":["Health-check and periodically verify store endpoints support Exemplars.","Upgrade pre-exemplar store versions to avoid Unimplemented errors.","Keep request deadlines above store fan-out latency."],"tags":["go","grpc","exemplars","store-gateway","fanout"],"backgroundTag":"upstream-api-error","analyzedSha":"35b8b991177def87ed52dcf10f9b6d87f07282c8","analyzedAt":"2026-09-07T01:49:59.689Z","contentChangedAt":"2026-09-07T01:49:59.689Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}