From 1df1a597ec2ac6ba1822e0602c1b703217fdc25d Mon Sep 17 00:00:00 2001 From: Devon Hudson Date: Fri, 2 Dec 2022 16:18:48 -0700 Subject: [PATCH] Remove assume offline on broadcast received --- federationapi/internal/perform.go | 5 ++++- federationapi/queue/queue.go | 1 + federationapi/statistics/statistics.go | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/federationapi/internal/perform.go b/federationapi/internal/perform.go index 3fa698ebe..cf375f848 100644 --- a/federationapi/internal/perform.go +++ b/federationapi/internal/perform.go @@ -762,8 +762,11 @@ func (r *FederationInternalAPI) PerformWakeupServers( func (r *FederationInternalAPI) MarkServersAlive(destinations []gomatrixserverlib.ServerName) { for _, srv := range destinations { - // Check the statistics cache for the blacklist status to prevent hitting + // Check the statistics cache for the blacklist & assumed offline status to prevent hitting // the database unnecessarily. + if r.statistics.ForServer(srv).AssumedOffline() { + _ = r.db.RemoveServerAssumedOffline(srv) + } if r.queues.IsServerBlacklisted(srv) { _ = r.db.RemoveServerFromBlacklist(srv) } diff --git a/federationapi/queue/queue.go b/federationapi/queue/queue.go index 75b1b36be..22ec4c3af 100644 --- a/federationapi/queue/queue.go +++ b/federationapi/queue/queue.go @@ -388,6 +388,7 @@ func (oqs *OutgoingQueues) RetryServer(srv gomatrixserverlib.ServerName) { serverStatistics := oqs.statistics.ForServer(srv) forceWakeup := serverStatistics.Blacklisted() + serverStatistics.RemoveAssumedOffline() serverStatistics.RemoveBlacklist() serverStatistics.ClearBackoff() diff --git a/federationapi/statistics/statistics.go b/federationapi/statistics/statistics.go index 85773a147..a30f64da3 100644 --- a/federationapi/statistics/statistics.go +++ b/federationapi/statistics/statistics.go @@ -260,6 +260,11 @@ func (s *ServerStatistics) RemoveBlacklist() { s.backoffCount.Store(0) } +// RemoveAssumedOffline removes the assumed offline status from the server. +func (s *ServerStatistics) RemoveAssumedOffline() { + s.assumedOffline.Store(false) +} + // SuccessCount returns the number of successful requests. This is // usually useful in constructing transaction IDs. func (s *ServerStatistics) SuccessCount() uint32 {