Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Skip calculating unread push actions in /sync when enable_push is…
Browse files Browse the repository at this point in the history
… false. (#14980)
  • Loading branch information
erikjohnston authored and jaywink committed Feb 15, 2023
1 parent 3e90dfd commit 4c69a50
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelog.d/14980.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Skip calculating unread push actions in /sync when enable_push is false.
8 changes: 8 additions & 0 deletions synapse/handlers/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,8 @@ def __init__(self, hs: "HomeServer"):
self._state_storage_controller = self._storage_controllers.state
self._device_handler = hs.get_device_handler()

self.should_calculate_push_rules = hs.config.push.enable_push

# TODO: flush cache entries on subsequent sync request.
# Once we get the next /sync request (ie, one with the same access token
# that sets 'since' to 'next_batch'), we know that device won't need a
Expand Down Expand Up @@ -1288,6 +1290,12 @@ async def _find_missing_partial_state_memberships(
async def unread_notifs_for_room_id(
self, room_id: str, sync_config: SyncConfig
) -> RoomNotifCounts:
if not self.should_calculate_push_rules:
# If push rules have been universally disabled then we know we won't
# have any unread counts in the DB, so we may as well skip asking
# the DB.
return RoomNotifCounts.empty()

with Measure(self.clock, "unread_notifs_for_room_id"):

return await self.store.get_unread_event_push_actions_by_room_for_user(
Expand Down
7 changes: 7 additions & 0 deletions synapse/storage/databases/main/event_push_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,11 +203,18 @@ class RoomNotifCounts:
# Map of thread ID to the notification counts.
threads: Dict[str, NotifCounts]

@staticmethod
def empty() -> "RoomNotifCounts":
return _EMPTY_ROOM_NOTIF_COUNTS

def __len__(self) -> int:
# To properly account for the amount of space in any caches.
return len(self.threads) + 1


_EMPTY_ROOM_NOTIF_COUNTS = RoomNotifCounts(NotifCounts(), {})


def _serialize_action(
actions: Collection[Union[Mapping, str]], is_highlight: bool
) -> str:
Expand Down

0 comments on commit 4c69a50

Please sign in to comment.