From 706bfbbb887c321f893ffcfae627ab5b976e7509 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Fri, 27 Sep 2024 16:39:22 +0100 Subject: [PATCH 1/3] Add fast path for sliding sync streams that only ask for extensions Principally useful for EX e2ee sliding sync connections. --- synapse/handlers/sliding_sync/__init__.py | 1 + synapse/handlers/sliding_sync/room_lists.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/synapse/handlers/sliding_sync/__init__.py b/synapse/handlers/sliding_sync/__init__.py index 9fcc68ff25..33bae3f84c 100644 --- a/synapse/handlers/sliding_sync/__init__.py +++ b/synapse/handlers/sliding_sync/__init__.py @@ -26,6 +26,7 @@ from synapse.handlers.relations import BundledAggregations from synapse.handlers.sliding_sync.extensions import SlidingSyncExtensionHandler from synapse.handlers.sliding_sync.room_lists import ( RoomsForUserType, + SlidingSyncInterestedRooms, SlidingSyncRoomLists, ) from synapse.handlers.sliding_sync.store import SlidingSyncConnectionStore diff --git a/synapse/handlers/sliding_sync/room_lists.py b/synapse/handlers/sliding_sync/room_lists.py index 0c9722021a..08e619042b 100644 --- a/synapse/handlers/sliding_sync/room_lists.py +++ b/synapse/handlers/sliding_sync/room_lists.py @@ -123,6 +123,19 @@ class SlidingSyncInterestedRooms: newly_left_rooms: AbstractSet[str] dm_room_ids: AbstractSet[str] + @staticmethod + def empty() -> "SlidingSyncInterestedRooms": + return SlidingSyncInterestedRooms( + lists={}, + relevant_room_map={}, + relevant_rooms_to_send_map={}, + all_rooms=set(), + room_membership_for_user_map={}, + newly_joined_rooms=set(), + newly_left_rooms=set(), + dm_room_ids=set(), + ) + def filter_membership_for_sync( *, @@ -181,6 +194,14 @@ class SlidingSyncRoomLists: from_token: Optional[StreamToken], ) -> SlidingSyncInterestedRooms: """Fetch the set of rooms that match the request""" + has_lists = sync_config.lists is not None and len(sync_config.lists) > 0 + has_room_subscriptions = ( + sync_config.room_subscriptions is not None + and len(sync_config.room_subscriptions) > 0 + ) + + if not has_lists and not has_room_subscriptions: + return SlidingSyncInterestedRooms.empty() if await self.store.have_finished_sliding_sync_background_jobs(): return await self._compute_interested_rooms_new_tables( From 075e8d3ca83d957a632a6747b97b66e80ac876b0 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Fri, 27 Sep 2024 16:40:34 +0100 Subject: [PATCH 2/3] Newsfile --- changelog.d/17768.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/17768.misc diff --git a/changelog.d/17768.misc b/changelog.d/17768.misc new file mode 100644 index 0000000000..3b80e72534 --- /dev/null +++ b/changelog.d/17768.misc @@ -0,0 +1 @@ +Improve performance of sliding sync connections that do not ask for any rooms. From 9b39b118170f78089aa99b87dccdd65b13fc8064 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Fri, 27 Sep 2024 16:47:10 +0100 Subject: [PATCH 3/3] Fix lint --- synapse/handlers/sliding_sync/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/synapse/handlers/sliding_sync/__init__.py b/synapse/handlers/sliding_sync/__init__.py index 33bae3f84c..9fcc68ff25 100644 --- a/synapse/handlers/sliding_sync/__init__.py +++ b/synapse/handlers/sliding_sync/__init__.py @@ -26,7 +26,6 @@ from synapse.handlers.relations import BundledAggregations from synapse.handlers.sliding_sync.extensions import SlidingSyncExtensionHandler from synapse.handlers.sliding_sync.room_lists import ( RoomsForUserType, - SlidingSyncInterestedRooms, SlidingSyncRoomLists, ) from synapse.handlers.sliding_sync.store import SlidingSyncConnectionStore