Skip calculating unread push actions in /sync when enable_push is false. (#14980)

This commit is contained in:
Erik Johnston 2023-02-14 12:10:29 +01:00 committed by GitHub
parent db2b105d69
commit f09db5c991
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 0 deletions

1
changelog.d/14980.misc Normal file
View File

@ -0,0 +1 @@
Skip calculating unread push actions in /sync when enable_push is false.

View File

@ -269,6 +269,8 @@ class SyncHandler:
self._state_storage_controller = self._storage_controllers.state self._state_storage_controller = self._storage_controllers.state
self._device_handler = hs.get_device_handler() 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. # TODO: flush cache entries on subsequent sync request.
# Once we get the next /sync request (ie, one with the same access token # 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 # that sets 'since' to 'next_batch'), we know that device won't need a
@ -1288,6 +1290,12 @@ class SyncHandler:
async def unread_notifs_for_room_id( async def unread_notifs_for_room_id(
self, room_id: str, sync_config: SyncConfig self, room_id: str, sync_config: SyncConfig
) -> RoomNotifCounts: ) -> 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"): with Measure(self.clock, "unread_notifs_for_room_id"):
return await self.store.get_unread_event_push_actions_by_room_for_user( return await self.store.get_unread_event_push_actions_by_room_for_user(

View File

@ -203,11 +203,18 @@ class RoomNotifCounts:
# Map of thread ID to the notification counts. # Map of thread ID to the notification counts.
threads: Dict[str, NotifCounts] threads: Dict[str, NotifCounts]
@staticmethod
def empty() -> "RoomNotifCounts":
return _EMPTY_ROOM_NOTIF_COUNTS
def __len__(self) -> int: def __len__(self) -> int:
# To properly account for the amount of space in any caches. # To properly account for the amount of space in any caches.
return len(self.threads) + 1 return len(self.threads) + 1
_EMPTY_ROOM_NOTIF_COUNTS = RoomNotifCounts(NotifCounts(), {})
def _serialize_action( def _serialize_action(
actions: Collection[Union[Mapping, str]], is_highlight: bool actions: Collection[Union[Mapping, str]], is_highlight: bool
) -> str: ) -> str: