Do not calculate presence or ephemeral events when they are filtered out (#14970)

This expands the previous optimisation from being only for initial
sync to being for all sync requests.

It also inverts some of the logic to be inclusive instead of exclusive.
This commit is contained in:
Patrick Cloke 2023-02-02 11:58:20 -05:00 committed by GitHub
parent 2186ebed6c
commit f36da501be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 10 deletions

1
changelog.d/14970.misc Normal file
View file

@ -0,0 +1 @@
Improve performance of `/sync` in a few situations.

View file

@ -1459,10 +1459,12 @@ class SyncHandler:
sync_result_builder, account_data_by_room sync_result_builder, account_data_by_room
) )
block_all_presence_data = ( # Presence data is included if the server has it enabled and not filtered out.
since_token is None and sync_config.filter_collection.blocks_all_presence() include_presence_data = (
self.hs_config.server.use_presence
and not sync_config.filter_collection.blocks_all_presence()
) )
if self.hs_config.server.use_presence and not block_all_presence_data: if include_presence_data:
logger.debug("Fetching presence data") logger.debug("Fetching presence data")
await self._generate_sync_entry_for_presence( await self._generate_sync_entry_for_presence(
sync_result_builder, sync_result_builder,
@ -1841,15 +1843,12 @@ class SyncHandler:
""" """
since_token = sync_result_builder.since_token since_token = sync_result_builder.since_token
user_id = sync_result_builder.sync_config.user.to_string()
# 1. Start by fetching all ephemeral events in rooms we've joined (if required). # 1. Start by fetching all ephemeral events in rooms we've joined (if required).
user_id = sync_result_builder.sync_config.user.to_string() if (
block_all_room_ephemeral = ( sync_result_builder.sync_config.filter_collection.blocks_all_room_ephemeral()
since_token is None ):
and sync_result_builder.sync_config.filter_collection.blocks_all_room_ephemeral()
)
if block_all_room_ephemeral:
ephemeral_by_room: Dict[str, List[JsonDict]] = {} ephemeral_by_room: Dict[str, List[JsonDict]] = {}
else: else:
now_token, ephemeral_by_room = await self.ephemeral_by_room( now_token, ephemeral_by_room = await self.ephemeral_by_room(