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

  1. Verify the rules store/gRPC endpoint is reachable and healthy
  2. Check store logs for why the Rules RPC was rejected
  3. 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)