gotd: retry non-fatal errors in getDifference calls
This commit is contained in:
@@ -489,11 +489,33 @@ func (s *internalState) getDifference(ctx context.Context) error {
|
|||||||
s.date = state.Date
|
s.date = state.Date
|
||||||
}
|
}
|
||||||
|
|
||||||
diff, err := s.client.UpdatesGetDifference(ctx, &tg.UpdatesGetDifferenceRequest{
|
var diff tg.UpdatesDifferenceClass
|
||||||
Pts: s.pts.State(),
|
var err error
|
||||||
Qts: s.qts.State(),
|
for {
|
||||||
Date: s.date,
|
diff, err = s.client.UpdatesGetDifference(ctx, &tg.UpdatesGetDifferenceRequest{
|
||||||
})
|
Pts: s.pts.State(),
|
||||||
|
Qts: s.qts.State(),
|
||||||
|
Date: s.date,
|
||||||
|
})
|
||||||
|
if isFatalError(err) {
|
||||||
|
return err
|
||||||
|
} else if err != nil {
|
||||||
|
dur, ok := tgerr.AsFloodWait(err)
|
||||||
|
if ok {
|
||||||
|
s.log.Warn("Flood wait error while getting difference", zap.Duration("wait", dur))
|
||||||
|
} else {
|
||||||
|
s.log.Error("Failed to get difference, retrying in 5 seconds...", zap.Error(err))
|
||||||
|
dur = 5 * time.Second
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
case <-time.After(dur):
|
||||||
|
case <-ctx.Done():
|
||||||
|
return fmt.Errorf("context canceled while waiting to retry: %w", ctx.Err())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "get difference")
|
return errors.Wrap(err, "get difference")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user