From 6b12d3ec6c48b82762cbbf60cb266520248b20c8 Mon Sep 17 00:00:00 2001 From: Michael Hollister Date: Thu, 30 May 2024 22:45:38 -0500 Subject: [PATCH] Improved wording of documentation and config option naming --- .../configuration/config_documentation.md | 23 +++++++++++-------- synapse/config/server.py | 8 +++---- synapse/federation/federation_server.py | 12 +++++++++- synapse/handlers/presence.py | 8 ++++--- 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/docs/usage/configuration/config_documentation.md b/docs/usage/configuration/config_documentation.md index 74a5c2ebae..dad99bb74f 100644 --- a/docs/usage/configuration/config_documentation.md +++ b/docs/usage/configuration/config_documentation.md @@ -246,8 +246,8 @@ Example configuration: ```yaml presence: enabled: false - sync_presence_tracking: true - federation_presence_tracking: true + local_activity_tracking: true + remote_activity_tracking: true ``` `enabled` can also be set to a special value of "untracked" which ignores updates @@ -259,14 +259,17 @@ received via clients and federation, while still accepting updates from the Enabling presence tracking can be resource intensive for the presence handler when server-side tracking of user activity is enabled. Below are some additional configuration options which may help improve the performance of the presence feature without outright disabling it: -* `sync_presence_tracking` (Default enabled): Determines if the server tracks a user's presence -activity when syncing. If disabled, the server will not automatically update the user's presence -activity when the sync endpoint is called. Note that client applications can still update their -presence by calling the respective presence endpoints. -* `federation_presence_tracking` (Default enabled): Determines if the server will accept -presence EDUs that only contain presence activity updates. If disabled, the server will drop -processing EDUs that do not contain updates to the `status_msg`, `displayname`, or -`avatar_url` fields. +* `local_activity_tracking` (Default enabled): Determines if the server tracks a user's activity +when syncing or fetching events. If disabled, the server will not automatically update the +user's presence activity when the /sync or /events endpoints are called. Note that client +applications can still update their presence by calling the presence /status endpoint. +* `remote_activity_tracking` (Default enabled): Determines if the server will accept presence +EDUs from remote servers that are exclusively user activity updates. If disabled, the server +will reject processing these EDUs. However if a presence EDU contains profile updates to any of +the `status_msg`, `displayname`, or `avatar_url` fields, then the server will accept the EDU. + +If the presence `enabled` field is set "untracked", then these options will both act as if set +to false. --- ### `require_auth_for_profile_requests` diff --git a/synapse/config/server.py b/synapse/config/server.py index e510205b98..2cb960b41c 100644 --- a/synapse/config/server.py +++ b/synapse/config/server.py @@ -385,13 +385,13 @@ class ServerConfig(Config): self.track_presence = self.presence_enabled and presence_enabled != "untracked" # Disabling server-side presence tracking - self.sync_presence_tracking = presence_config.get( - "sync_presence_tracking", True + self.presence_local_activity_tracking = presence_config.get( + "local_activity_tracking", True ) # Disabling federation presence tracking - self.federation_presence_tracking = presence_config.get( - "federation_presence_tracking", True + self.presence_remote_activity_tracking = presence_config.get( + "remote_activity_tracking", True ) # Custom presence router module diff --git a/synapse/federation/federation_server.py b/synapse/federation/federation_server.py index d8dc1484b0..19f9edd25a 100644 --- a/synapse/federation/federation_server.py +++ b/synapse/federation/federation_server.py @@ -1425,11 +1425,21 @@ class FederationHandlerRegistry: self._edu_type_to_instance[edu_type] = instance_names async def on_edu(self, edu_type: str, origin: str, content: dict) -> None: + """Passes an EDU to a registered handler if one exists + + This potentially modifies the `content` dict for `m.presence` EDUs when + presence `remote_activity_tracking` is disabled. + + Args: + edu_type: The type of the incoming EDU to process + origin: The server we received the event from + content: The content of the EDU + """ if not self.config.server.track_presence and edu_type == EduTypes.PRESENCE: return if ( - not self.config.server.federation_presence_tracking + not self.config.server.presence_remote_activity_tracking and edu_type == EduTypes.PRESENCE ): filtered_edus = [] diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py index 6ea4cf7867..00ce79ed60 100644 --- a/synapse/handlers/presence.py +++ b/synapse/handlers/presence.py @@ -201,7 +201,9 @@ class BasePresenceHandler(abc.ABC): self._presence_enabled = hs.config.server.presence_enabled self._track_presence = hs.config.server.track_presence - self._sync_presence_tracking = hs.config.server.sync_presence_tracking + self._presence_local_activity_tracking = ( + hs.config.server.presence_local_activity_tracking + ) self._federation = None if hs.should_send_federation(): @@ -585,7 +587,7 @@ class WorkerPresenceHandler(BasePresenceHandler): if ( not affect_presence or not self._track_presence - or not self._sync_presence_tracking + or not self._presence_local_activity_tracking ): return _NullContextManager() @@ -1152,7 +1154,7 @@ class PresenceHandler(BasePresenceHandler): if ( not affect_presence or not self._track_presence - or not self._sync_presence_tracking + or not self._presence_local_activity_tracking ): return _NullContextManager()