diff options
author | Erik Johnston <erik@matrix.org> | 2023-04-04 14:11:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-04 14:11:34 +0100 |
commit | 79d2e2e79c97b21a4b3b786594d0d9ebebd33964 (patch) | |
tree | af0e4ed37db2edb5ea08b0afc831e2c2f539c980 /synapse/storage/databases/main | |
parent | Fix a rare bug where initial /syncs would fail (#15383) (diff) | |
download | synapse-79d2e2e79c97b21a4b3b786594d0d9ebebd33964.tar.xz |
Speed up membership queries for users with forgotten rooms (#15385)
Diffstat (limited to 'synapse/storage/databases/main')
-rw-r--r-- | synapse/storage/databases/main/roommember.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/synapse/storage/databases/main/roommember.py b/synapse/storage/databases/main/roommember.py index 694a5b802c..daad58291a 100644 --- a/synapse/storage/databases/main/roommember.py +++ b/synapse/storage/databases/main/roommember.py @@ -419,7 +419,11 @@ class RoomMemberWorkerStore(EventsWorkerStore): ) # Now we filter out forgotten and excluded rooms - rooms_to_exclude = await self.get_forgotten_rooms_for_user(user_id) + rooms_to_exclude: AbstractSet[str] = set() + + # Users can't forget joined/invited rooms, so we skip the check for such look ups. + if any(m not in (Membership.JOIN, Membership.INVITE) for m in membership_list): + rooms_to_exclude = await self.get_forgotten_rooms_for_user(user_id) if excluded_rooms is not None: # Take a copy to avoid mutating the in-cache set @@ -1391,6 +1395,12 @@ class RoomMemberBackgroundUpdateStore(SQLBaseStore): columns=["user_id", "room_id"], where_clause="forgotten = 1", ) + self.db_pool.updates.register_background_index_update( + "room_membership_user_room_index", + index_name="room_membership_user_room_idx", + table="room_memberships", + columns=["user_id", "room_id"], + ) async def _background_add_membership_profile( self, progress: JsonDict, batch_size: int |