diff options
author | Erik Johnston <erikj@element.io> | 2024-01-11 11:52:13 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-11 11:52:13 +0000 |
commit | b11f7b5122061d4908b3328689486bc16dc58445 (patch) | |
tree | f937c9d6f2e1b34653d7adc3b4024bafbbda7b0e /synapse/push | |
parent | Bump pillow from 10.1.0 to 10.2.0 (#16802) (diff) | |
download | synapse-b11f7b5122061d4908b3328689486bc16dc58445.tar.xz |
Improve DB performance of calculating badge counts for push. (#16756)
The crux of the change is to try and make the queries simpler and pull out fewer rows. Before, there were quite a few joins against subqueries, which caused postgres to pull out more rows than necessary. Instead, let's simplify the query and do some of the filtering out in Python instead, letting Postgres do better optimizations now that it doesn't have to deal with joins against subqueries. Review note: this is a complete rewrite of the function, so not sure how useful the diff is. --------- Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com>
Diffstat (limited to 'synapse/push')
-rw-r--r-- | synapse/push/push_tools.py | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/synapse/push/push_tools.py b/synapse/push/push_tools.py index 03ce0b4dc6..cce9583fa7 100644 --- a/synapse/push/push_tools.py +++ b/synapse/push/push_tools.py @@ -28,17 +28,11 @@ from synapse.storage.databases.main import DataStore async def get_badge_count(store: DataStore, user_id: str, group_by_room: bool) -> int: invites = await store.get_invited_rooms_for_local_user(user_id) - joins = await store.get_rooms_for_user(user_id) badge = len(invites) room_to_count = await store.get_unread_counts_by_room_for_user(user_id) - for room_id, notify_count in room_to_count.items(): - # room_to_count may include rooms which the user has left, - # ignore those. - if room_id not in joins: - continue - + for _room_id, notify_count in room_to_count.items(): if notify_count == 0: continue |