thanos-io/thanos · error
fetching rules from rules client
Error message
fetching rules from rules client %v
What it means
Raised in rulesStream.receive when the initial stream.client.Rules RPC call to the underlying rules store fails — connection errors, unavailability, or the store rejecting the request. The error is wrapped with the client identity; if the request strategy is ABORT it propagates as an error, otherwise it is degraded to a warning response.
Solutions
- Verify the rules store/gRPC endpoint is reachable and healthy
- Check store logs for why the Rules RPC was rejected
- For ABO (abort) strategy callers, treat as fatal; for warnings, the client receives a warning response instead
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at pkg/rules/proxy.go:106 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of thanos-io/thanos@35b8b99117 (2026-09-07).
Data as JSON: /api/errors/1c46fdc18f6548f7.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/rules/proxy.go:106
type rulesStream struct {
client rulespb.RulesClient
request *rulespb.RulesRequest
channel chan<- *rulespb.RuleGroup
server rulespb.Rules_RulesServer
}
func (stream *rulesStream) receive(ctx context.Context) error {
var (
err error
rules rulespb.Rules_RulesClient
)
tracing.DoInSpan(ctx, "receive_stream_request", func(ctx context.Context) {
rules, err = stream.client.Rules(ctx, stream.request)
})
if err != nil {
err = errors.Wrapf(err, "fetching rules from rules client %v", stream.client)
if stream.request.PartialResponseStrategy == storepb.PartialResponseStrategy_ABORT {
return err
}
if serr := stream.server.Send(rulespb.NewWarningRulesResponse(err)); serr != nil {
return serr
}
// Not an error if response strategy is warning.
return nil
}
for {
rule, err := rules.Recv()
if err == io.EOF {
return nil
}
View on GitHub (pinned to 35b8b99117)