revid: fixed multiSender sending and handling of send fails

This commit is contained in:
Saxon 2019-03-10 16:49:41 +10:30
parent 85401c8df4
commit 48c7a1f21d
1 changed files with 21 additions and 13 deletions

View File

@ -70,28 +70,36 @@ func newMultiSender(owner *Revid, senders []loadSender) *multiSender {
func (s *multiSender) Write(d []byte) (int, error) {
for i, sender := range s.senders {
sender.load(d)
s.owner.config.Logger.Log(logger.Debug, "sending to output", "output", i)
err := sender.send()
if err != nil {
if !s.owner.IsRunning() {
return 0, err
}
if s.owner.config.SendRetry {
for err != nil {
s.owner.config.Logger.Log(logger.Warning, "send failed", "output", i, "error", err)
err = sender.handleSendFail(err)
if err != nil {
s.owner.config.Logger.Log(logger.Warning, "could not currenty handle send fail", "output", i, "error", err)
continue
}
err = sender.send()
s.owner.config.Logger.Log(logger.Warning, "send failed", "output", i, "error", err)
s.handleFail(sender, err)
for s.owner.config.SendRetry {
if !s.owner.IsRunning() {
sender.release()
return 0, err
}
err = sender.send()
if err == nil {
break
}
s.handleFail(sender, err)
}
}
sender.release()
}
return len(d), nil
}
// handleFail calls the passed sender's handleSendFail method and then logs
// error if this was not successful.
func (s *multiSender) handleFail(sender loadSender, e error) {
err := sender.handleSendFail(e)
if err != nil {
s.owner.config.Logger.Log(logger.Warning, "could not currenty handle send fail", "error", err)
}
}
// minimalHttpSender implements Sender for posting HTTP to netreceiver or vidgrind.
type minimalHttpSender struct {
client *netsender.Sender