func()

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
}