in pipeline/senders/retry.go [92:117]
func (rs *RetryingSender) Send(report metrics.StampedMetricReport) error {
rs.closeMutex.RLock()
defer rs.closeMutex.RUnlock()
if rs.closed {
return errors.New("RetryingSender: Send called on closed sender")
}
epr, err := rs.endpoint.BuildReport(report)
if err != nil {
rs.recorder.SendFailed(report.Id, rs.endpoint.Name())
return err
}
msg := addMsg{
entry: queueEntry{epr, rs.clock.Now()},
result: make(chan error),
}
rs.add <- msg
err = <-msg.result
if err != nil {
// Record this immediate failure.
rs.recorder.SendFailed(report.Id, rs.endpoint.Name())
}
return err
}