mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-06-05 07:08:50 -04:00
Return read-only collections from @cached
methods (#13755)
It's important that collections returned from `@cached` methods are not modified, otherwise future retrievals from the cache will return the modified collection. This applies to the return values from `@cached` methods and the values inside the dictionaries returned by `@cachedList` methods. It's not necessary for the dictionaries returned by `@cachedList` methods themselves to be read-only. Signed-off-by: Sean Quah <seanq@matrix.org> Co-authored-by: David Robertson <davidr@element.io>
This commit is contained in:
parent
14be78d492
commit
d0c713cc85
27 changed files with 98 additions and 77 deletions
|
@ -22,6 +22,7 @@ from typing import (
|
|||
List,
|
||||
Mapping,
|
||||
Optional,
|
||||
Sequence,
|
||||
Set,
|
||||
Tuple,
|
||||
Union,
|
||||
|
@ -149,7 +150,7 @@ class BulkPushRuleEvaluator:
|
|||
# little, we can skip fetching a huge number of push rules in large rooms.
|
||||
# This helps make joins and leaves faster.
|
||||
if event.type == EventTypes.Member:
|
||||
local_users = []
|
||||
local_users: Sequence[str] = []
|
||||
# We never notify a user about their own actions. This is enforced in
|
||||
# `_action_for_event_by_user` in the loop over `rules_by_user`, but we
|
||||
# do the same check here to avoid unnecessary DB queries.
|
||||
|
@ -184,7 +185,6 @@ class BulkPushRuleEvaluator:
|
|||
if event.type == EventTypes.Member and event.membership == Membership.INVITE:
|
||||
invited = event.state_key
|
||||
if invited and self.hs.is_mine_id(invited) and invited not in local_users:
|
||||
local_users = list(local_users)
|
||||
local_users.append(invited)
|
||||
|
||||
if not local_users:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue