diff options
author | Erik Johnston <erik@matrix.org> | 2021-09-08 15:18:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-08 15:18:35 +0100 |
commit | 74f01e11c9e762101b834493a52da12538477e75 (patch) | |
tree | 96d02f35a854f11debf9bdebddf013cfd3dc23f2 /synapse | |
parent | Add a constant for m.federate. (#10775) (diff) | |
download | synapse-74f01e11c9e762101b834493a52da12538477e75.tar.xz |
Skip handling of push actions for outlier events (#10780)
Outlier events don't ever have push actions associated with them, so we can skip some expensive queries during event persistence.
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/storage/databases/main/events.py | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py index f07e288056..14ada8a8b3 100644 --- a/synapse/storage/databases/main/events.py +++ b/synapse/storage/databases/main/events.py @@ -1990,6 +1990,15 @@ class PersistEventsStore: events_and_context. """ + # Only non outlier events will have push actions associated with them, + # so let's filter them out. (This makes joining large rooms faster, as + # these queries took seconds to process all the state events). + non_outlier_events = [ + event + for event, _ in events_and_contexts + if not event.internal_metadata.is_outlier() + ] + sql = """ INSERT INTO event_push_actions ( room_id, event_id, user_id, actions, stream_ordering, @@ -2000,7 +2009,7 @@ class PersistEventsStore: WHERE event_id = ? """ - if events_and_contexts: + if non_outlier_events: txn.execute_batch( sql, ( @@ -2010,12 +2019,12 @@ class PersistEventsStore: event.depth, event.event_id, ) - for event, _ in events_and_contexts + for event in non_outlier_events ), ) room_to_event_ids: Dict[str, List[str]] = {} - for e, _ in events_and_contexts: + for e in non_outlier_events: room_to_event_ids.setdefault(e.room_id, []).append(e.event_id) for room_id, event_ids in room_to_event_ids.items(): @@ -2040,7 +2049,11 @@ class PersistEventsStore: # persisted. txn.execute_batch( "DELETE FROM event_push_actions_staging WHERE event_id = ?", - ((event.event_id,) for event, _ in all_events_and_contexts), + ( + (event.event_id,) + for event, _ in all_events_and_contexts + if not event.internal_metadata.is_outlier() + ), ) def _remove_push_actions_for_event_id_txn(self, txn, room_id, event_id): |