diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2021-01-07 08:03:38 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-07 13:03:38 +0000 |
commit | 23d701864fedbc40863b34c9c46c134295dd0a35 (patch) | |
tree | 87a76a8d40a8443ce9bfc6d3c7970560ee2b2a80 /synapse/push | |
parent | tox: Add a -noextras factor (#9030) (diff) | |
download | synapse-23d701864fedbc40863b34c9c46c134295dd0a35.tar.xz |
Improve the performance of calculating ignored users in large rooms (#9024)
This allows for efficiently finding which users ignore a particular user. Co-authored-by: Erik Johnston <erik@matrix.org>
Diffstat (limited to 'synapse/push')
-rw-r--r-- | synapse/push/bulk_push_rule_evaluator.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/synapse/push/bulk_push_rule_evaluator.py b/synapse/push/bulk_push_rule_evaluator.py index 10f27e4378..9018f9e20b 100644 --- a/synapse/push/bulk_push_rule_evaluator.py +++ b/synapse/push/bulk_push_rule_evaluator.py @@ -203,14 +203,18 @@ class BulkPushRuleEvaluator: condition_cache = {} # type: Dict[str, bool] + # If the event is not a state event check if any users ignore the sender. + if not event.is_state(): + ignorers = await self.store.ignored_by(event.sender) + else: + ignorers = set() + for uid, rules in rules_by_user.items(): if event.sender == uid: continue - if not event.is_state(): - is_ignored = await self.store.is_ignored_by(event.sender, uid) - if is_ignored: - continue + if uid in ignorers: + continue display_name = None profile_info = room_members.get(uid) |