Remove server from blacklist cache when retrying sending to that server

This commit is contained in:
Devon Hudson 2022-10-06 16:58:25 -06:00
parent 34ed316584
commit ce2670bcd9
No known key found for this signature in database
GPG Key ID: CD06B18E77F6A628
2 changed files with 7 additions and 1 deletions

View File

@ -329,6 +329,7 @@ func (oqs *OutgoingQueues) RetryServer(srv gomatrixserverlib.ServerName) {
if oqs.disabled {
return
}
oqs.statistics.ForServer(srv).RemoveBlacklist()
if queue := oqs.getQueue(srv); queue != nil {
queue.wakeQueueIfNeeded()
}

View File

@ -83,6 +83,7 @@ func (s *ServerStatistics) duration(count uint32) time.Duration {
func (s *ServerStatistics) cancel() {
s.blacklisted.Store(false)
s.backoffUntil.Store(time.Time{})
s.backoffCount.Store(0)
select {
case s.interrupt <- struct{}{}:
default:
@ -96,7 +97,6 @@ func (s *ServerStatistics) cancel() {
func (s *ServerStatistics) Success() {
s.cancel()
s.successCounter.Inc()
s.backoffCount.Store(0)
if s.statistics.DB != nil {
if err := s.statistics.DB.RemoveServerFromBlacklist(s.serverName); err != nil {
logrus.WithError(err).Errorf("Failed to remove %q from blacklist", s.serverName)
@ -174,6 +174,11 @@ func (s *ServerStatistics) Blacklisted() bool {
return s.blacklisted.Load()
}
// RemoveBlacklist removes the blacklisted status from the server.
func (s *ServerStatistics) RemoveBlacklist() {
s.cancel()
}
// SuccessCount returns the number of successful requests. This is
// usually useful in constructing transaction IDs.
func (s *ServerStatistics) SuccessCount() uint32 {