From dbebdab044cdcfeb726cd11ad68f6817de6acba3 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 19 Aug 2025 17:04:44 +0100 Subject: [PATCH] Pass `EventContext` into `_update_backward_extremities` --- synapse/storage/databases/main/events.py | 33 +++++++++++++++--------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py index a50e889b9d..abebf1e1b1 100644 --- a/synapse/storage/databases/main/events.py +++ b/synapse/storage/databases/main/events.py @@ -2629,7 +2629,7 @@ class PersistEventsStore: # Update the event_backward_extremities table now that this # event isn't an outlier any more. - self._update_backward_extremeties(txn, [event]) + self._update_backward_extremeties(txn, [(event, context)]) return [ec for ec in events_and_contexts if ec[0] not in to_remove] @@ -2811,7 +2811,8 @@ class PersistEventsStore: # Update the event_forward_extremities, event_backward_extremities and # event_edges tables. self._handle_mult_prev_events( - txn, events=[event for event, _ in events_and_contexts] + txn, + events_and_contexts, ) for event, _ in events_and_contexts: @@ -3517,7 +3518,9 @@ class PersistEventsStore: ) def _handle_mult_prev_events( - self, txn: LoggingTransaction, events: List[EventBase] + self, + txn: LoggingTransaction, + events_and_contexts: List[EventPersistencePair], ) -> None: """ For the given event, update the event edges table and forward and @@ -3528,14 +3531,18 @@ class PersistEventsStore: table="event_edges", keys=("event_id", "prev_event_id"), values=[ - (ev.event_id, e_id) for ev in events for e_id in ev.prev_event_ids() + (ev.event_id, e_id) + for (ev, _) in events_and_contexts + for e_id in ev.prev_event_ids() ], ) - self._update_backward_extremeties(txn, events) + self._update_backward_extremeties(txn, events_and_contexts) def _update_backward_extremeties( - self, txn: LoggingTransaction, events: List[EventBase] + self, + txn: LoggingTransaction, + events_and_contexts: List[EventPersistencePair], ) -> None: """Updates the event_backward_extremities tables based on the new/updated events being persisted. @@ -3546,11 +3553,11 @@ class PersistEventsStore: Forward extremities are handled when we first start persisting the events. """ - room_id = events[0].room_id + room_id = events_and_contexts[0][0].room_id potential_backwards_extremities = { e_id - for ev in events + for (ev,_) in events_and_contexts for e_id in ev.prev_event_ids() if not ev.internal_metadata.is_outlier() } @@ -3558,7 +3565,9 @@ class PersistEventsStore: if not potential_backwards_extremities: return - existing_events_outliers = self.db_pool.simple_select_many_txn( + # Filter potential_backwards_extremities to remove events that are in the + # table. + existing_events = self.db_pool.simple_select_many_txn( txn, table="events", column="event_id", @@ -3568,7 +3577,7 @@ class PersistEventsStore: ) potential_backwards_extremities.difference_update( - e for (e,) in existing_events_outliers + e for (e,) in existing_events ) if potential_backwards_extremities: @@ -3584,7 +3593,7 @@ class PersistEventsStore: # Record the stream orderings where we have new gaps. gap_events = [ (room_id, self._instance_name, ev.internal_metadata.stream_ordering) - for ev in events + for (ev, _) in events_and_contexts if any( e_id in potential_backwards_extremities for e_id in ev.prev_event_ids() @@ -3605,7 +3614,7 @@ class PersistEventsStore: ) backward_extremity_tuples_to_remove = [ (ev.event_id, ev.room_id) - for ev in events + for (ev, _) in events_and_contexts if not ev.internal_metadata.is_outlier() # If we encountered an event with no prev_events, then we might # as well remove it now because it won't ever have anything else