From a46c36d6645f79adcbabc588370264bd2c6b14ed Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Thu, 24 Mar 2022 14:36:51 +0000 Subject: [PATCH] Invalidate the cache --- synapse/push/bulk_push_rule_evaluator.py | 2 +- synapse/storage/databases/main/cache.py | 4 ++++ synapse/storage/databases/main/events.py | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/synapse/push/bulk_push_rule_evaluator.py b/synapse/push/bulk_push_rule_evaluator.py index ddc64ad6a3e4..a402a3e40374 100644 --- a/synapse/push/bulk_push_rule_evaluator.py +++ b/synapse/push/bulk_push_rule_evaluator.py @@ -506,7 +506,7 @@ async def _update_rules_with_member_event_ids( member_event_ids.values() ) - # If the event is a join event then it will be in current state evnts + # If the event is a join event then it will be in current state events # map but not in the DB, so we have to explicitly insert it. if event.type == EventTypes.Member: for event_id in member_event_ids.values(): diff --git a/synapse/storage/databases/main/cache.py b/synapse/storage/databases/main/cache.py index 2d7511d61391..dd4e83a2ad19 100644 --- a/synapse/storage/databases/main/cache.py +++ b/synapse/storage/databases/main/cache.py @@ -192,6 +192,10 @@ def _invalidate_caches_for_event( self.get_unread_event_push_actions_by_room_for_user.invalidate((room_id,)) + # The `_get_membership_from_event_id` is immutable, except for the + # case where we look up an event *before* persisting it. + self._get_membership_from_event_id.invalidate((event_id,)) + if not backfilled: self._events_stream_cache.entity_has_changed(room_id, stream_ordering) diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py index 1f60aef180d0..aacbe65c5059 100644 --- a/synapse/storage/databases/main/events.py +++ b/synapse/storage/databases/main/events.py @@ -1745,6 +1745,13 @@ def non_null_str_or_none(val: Any) -> Optional[str]: (event.state_key,), ) + # The `_get_joined_profile_from_event_id` is immutable, except for the + # case where we look up an event *before* persisting it. + txn.call_after( + self.store._get_membership_from_event_id.invalidate, + (event.event_id,), + ) + # We update the local_current_membership table only if the event is # "current", i.e., its something that has just happened. #