thanos-io/thanos · error

sending exemplars error to server

Error message

sending exemplars error to server %v

What it means

In the exemplars proxy receive loop, forwarding a warning response (created after a receive error from the exemplars client) back on the gRPC server stream failed, meaning the querying client connection is broken.

Solutions

  1. Check the client stream state; the caller likely disconnected.
  2. Log and drop the response; the request is already failing.
  3. Verify gRPC server Send machinery is healthy.
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at pkg/exemplars/proxy.go:204 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/7832019af97f0b1f. Report an issue: GitHub.

Appendix: source

Thrown at pkg/exemplars/proxy.go:204

		// Not an error if response strategy is warning.
		return nil
	}

	for {
		exemplar, err := exemplars.Recv()
		if err == io.EOF {
			return nil
		}

		if err != nil {
			err = errors.Wrapf(err, "receiving exemplars from exemplars client %v", stream.client)

			if stream.request.PartialResponseStrategy == storepb.PartialResponseStrategy_ABORT {
				return err
			}

			if err := stream.server.Send(exemplarspb.NewWarningExemplarsResponse(err)); err != nil {
				return errors.Wrapf(err, "sending exemplars error to server %v", stream.server)
			}
			// Not an error if response strategy is warning.
			return nil
		}

		if w := exemplar.GetWarning(); w != "" {
			if err := stream.server.Send(exemplarspb.NewWarningExemplarsResponse(errors.New(w))); err != nil {
				return errors.Wrapf(err, "sending exemplars warning to server %v", stream.server)
			}
			continue
		}

		select {
		case stream.channel <- exemplar.GetData():
		case <-ctx.Done():
			return ctx.Err()
		}
	}

View on GitHub (pinned to 35b8b99117)