aboutsummaryrefslogtreecommitdiff
path: root/federationapi/statistics
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2024-02-28 20:59:34 +0100
committerGitHub <noreply@github.com>2024-02-28 20:59:34 +0100
commit865fff5f03d06f649736c7fcca134086dfccf7ab (patch)
tree013a330d5a5770547cad8fcf45ae1ab1cb4f8b29 /federationapi/statistics
parent4ccf6d6f67e7029a0c4f074aca93b0bcf267e5b6 (diff)
Make usage of relays optional, avoid DB roundtrips (#3337)
This should avoid 2 additional DB roundtrips if we don't want to use relays. So instead of possibly doing roughly 20k trips to the DB, we are now "only" doing ~6600. --------- Co-authored-by: devonh <devon.dmytro@gmail.com>
Diffstat (limited to 'federationapi/statistics')
-rw-r--r--federationapi/statistics/statistics.go11
-rw-r--r--federationapi/statistics/statistics_test.go4
2 files changed, 13 insertions, 2 deletions
diff --git a/federationapi/statistics/statistics.go b/federationapi/statistics/statistics.go
index e5fc4b94..e133fc9c 100644
--- a/federationapi/statistics/statistics.go
+++ b/federationapi/statistics/statistics.go
@@ -34,12 +34,15 @@ type Statistics struct {
// mark the destination as offline. At this point we should attempt
// to send messages to the user's async relay servers if we know them.
FailuresUntilAssumedOffline uint32
+
+ enableRelays bool
}
func NewStatistics(
db storage.Database,
failuresUntilBlacklist uint32,
failuresUntilAssumedOffline uint32,
+ enableRelays bool,
) Statistics {
return Statistics{
DB: db,
@@ -47,6 +50,7 @@ func NewStatistics(
FailuresUntilAssumedOffline: failuresUntilAssumedOffline,
backoffTimers: make(map[spec.ServerName]*time.Timer),
servers: make(map[spec.ServerName]*ServerStatistics),
+ enableRelays: enableRelays,
}
}
@@ -73,6 +77,13 @@ func (s *Statistics) ForServer(serverName spec.ServerName) *ServerStatistics {
} else {
server.blacklisted.Store(blacklisted)
}
+
+ // Don't bother hitting the database 2 additional times
+ // if we don't want to use relays.
+ if !s.enableRelays {
+ return server
+ }
+
assumedOffline, err := s.DB.IsServerAssumedOffline(context.Background(), serverName)
if err != nil {
logrus.WithError(err).Errorf("Failed to get assumed offline entry %q", serverName)
diff --git a/federationapi/statistics/statistics_test.go b/federationapi/statistics/statistics_test.go
index a930bc3b..4376a905 100644
--- a/federationapi/statistics/statistics_test.go
+++ b/federationapi/statistics/statistics_test.go
@@ -16,7 +16,7 @@ const (
)
func TestBackoff(t *testing.T) {
- stats := NewStatistics(nil, FailuresUntilBlacklist, FailuresUntilAssumedOffline)
+ stats := NewStatistics(nil, FailuresUntilBlacklist, FailuresUntilAssumedOffline, false)
server := ServerStatistics{
statistics: &stats,
serverName: "test.com",
@@ -106,7 +106,7 @@ func TestBackoff(t *testing.T) {
}
func TestRelayServersListing(t *testing.T) {
- stats := NewStatistics(test.NewInMemoryFederationDatabase(), FailuresUntilBlacklist, FailuresUntilAssumedOffline)
+ stats := NewStatistics(test.NewInMemoryFederationDatabase(), FailuresUntilBlacklist, FailuresUntilAssumedOffline, false)
server := ServerStatistics{statistics: &stats}
server.AddRelayServers([]spec.ServerName{"relay1", "relay1", "relay2"})
relayServers := server.KnownRelayServers()