diff --git a/internal/reddit/client.go b/internal/reddit/client.go index 0b9938a..bba4b35 100644 --- a/internal/reddit/client.go +++ b/internal/reddit/client.go @@ -107,6 +107,9 @@ func (rac *AuthenticatedClient) request(r *Request, rh ResponseHandler, empty in if err != nil { rac.statsd.Incr("reddit.api.errors", r.tags, 0.1) + if strings.Contains(err.Error(), "http2: timeout awaiting response headers") { + return nil, ErrTimeout + } return nil, err } defer resp.Body.Close() diff --git a/internal/reddit/errors.go b/internal/reddit/errors.go index 8a6b01e..cb605df 100644 --- a/internal/reddit/errors.go +++ b/internal/reddit/errors.go @@ -16,4 +16,6 @@ func (se ServerError) Error() string { var ( // ErrOauthRevoked . ErrOauthRevoked = errors.New("oauth revoked") + // ErrTimeout . + ErrTimeout = errors.New("timeout") ) diff --git a/internal/worker/notifications.go b/internal/worker/notifications.go index 8ac180f..39402ea 100644 --- a/internal/worker/notifications.go +++ b/internal/worker/notifications.go @@ -243,25 +243,28 @@ func (nc *notificationsConsumer) Consume(delivery rmq.Delivery) { msgs, err := rac.MessageInbox(opts...) if err != nil { - if err != reddit.ErrOauthRevoked { + switch err { + case reddit.ErrTimeout: // Don't log timeouts + break + case reddit.ErrOauthRevoked: + err = nc.deleteAccount(ctx, account) + if err != nil { + nc.logger.WithFields(logrus.Fields{ + "account#username": account.NormalizedUsername(), + "err": err, + }).Error("failed to remove revoked account") + return + } + nc.logger.WithFields(logrus.Fields{ + "account#username": account.NormalizedUsername(), + }).Info("removed revoked account") + break + default: nc.logger.WithFields(logrus.Fields{ "account#username": account.NormalizedUsername(), "err": err, }).Error("failed to fetch message inbox") - return } - - err = nc.deleteAccount(ctx, account) - if err != nil { - nc.logger.WithFields(logrus.Fields{ - "account#username": account.NormalizedUsername(), - "err": err, - }).Error("failed to remove revoked account") - return - } - nc.logger.WithFields(logrus.Fields{ - "account#username": account.NormalizedUsername(), - }).Info("removed revoked account") return }