thanos-io/thanos · error
sending metadata warning to server
Error message
sending metadata warning to server %v
What it means
When the upstream response carries a warning, the proxy forwards it as a warning metadata response; if that forward Send fails it is wrapped with 'sending metadata warning to server %v'. The warning itself could not be delivered to the caller.
Solutions
- Check whether the client canceled (context.Canceled/gRPC Canceled) — this is benign
- Ensure the client keeps the stream open until it has read all responses
- Investigate client-side network stability if this recurs without cancelation
- Log the underlying warning content so the intended warning is not lost
Defensive patterns
Strategy: try-catch
Try / catch
if err := stream.ServerSend(warnResp); err != nil {
if status.Code(err) == codes.Canceled {
return nil // client gone; warning undeliverable
}
return err
} Prevention
- Keep clients connected until stream EOF
- Log warning content before attempting to forward it
- Avoid aggressive client-side timeouts on long metadata queries
When it happens
Trigger: stream.server.Send of a warning response fails — the downstream client stream is closed, canceled, or the connection broke.
Common situations: Client cancels a PxL metadata query while warnings are being forwarded; idle timeout closes the client gRPC stream mid-response.
Related errors
AI-assisted analysis of thanos-io/thanos@35b8b99117 (2026-09-07).
Data as JSON: /api/errors/64596affd56b7a21.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/metadata/proxy.go:143
}
if err != nil {
err = errors.Wrapf(err, "receiving metric metadata from metadata client %v", stream.client)
if stream.request.PartialResponseStrategy == storepb.PartialResponseStrategy_ABORT {
return err
}
if err := stream.server.Send(metadatapb.NewWarningMetadataResponse(err)); err != nil {
return errors.Wrapf(err, "sending metadata error to server %v", stream.server)
}
// Not an error if response strategy is warning.
return nil
}
if w := resp.GetWarning(); w != "" {
if err := stream.server.Send(metadatapb.NewWarningMetadataResponse(errors.New(w))); err != nil {
return errors.Wrapf(err, "sending metadata warning to server %v", stream.server)
}
continue
}
select {
case stream.channel <- resp.GetMetadata():
case <-ctx.Done():
return ctx.Err()
}
}
}
View on GitHub (pinned to 35b8b99117)