From b07a5c780cb7bd08b1b0565e86fde213e50bf065 Mon Sep 17 00:00:00 2001 From: timedout Date: Sat, 30 May 2026 22:56:00 +0100 Subject: [PATCH] perf: Don't try to re-persist non-outliers we already have --- .../fetch_and_handle_outliers.rs | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/service/rooms/event_handler/fetch_and_handle_outliers.rs b/src/service/rooms/event_handler/fetch_and_handle_outliers.rs index 8618466cf..272f817fa 100644 --- a/src/service/rooms/event_handler/fetch_and_handle_outliers.rs +++ b/src/service/rooms/event_handler/fetch_and_handle_outliers.rs @@ -542,6 +542,23 @@ pub async fn get_missing_events( let pdu = PduEvent::from_id_val(&event_id, pdu_json).map_err(|e| { err!(Request(BadJson("Failed to parse gapfilled event {event_id}: {e}"))) })?; + if discovered.contains_key(&event_id) { + // We already received this event. + trace!("Already received {event_id}"); + continue; + } + if self + .services + .timeline + .non_outlier_pdu_exists(&event_id) + .await + { + // NOTE: we explicitly check for *non*-outlier events here, as if we end + // up discovering outlier events, we will be able to upgrade them + // immediately. + trace!("Already have {event_id} as a timeline PDU"); + continue; + } if pdu.depth < min_depth { debug_warn!( @@ -557,6 +574,7 @@ pub async fn get_missing_events( for prev_event_id in pdu.prev_events() { if discovered.contains_key(prev_event_id) { // We already received this event. + trace!("Already received prev event {prev_event_id}"); continue; } if self @@ -568,6 +586,7 @@ pub async fn get_missing_events( // NOTE: we explicitly check for *non*-outlier events here, as if we end // up discovering outlier events, we will be able to upgrade them // immediately. + trace!("Already have prev event {prev_event_id} as a timeline PDU"); continue; } if let Ok(outlier) = self.services.timeline.get_pdu(prev_event_id).await { @@ -586,14 +605,17 @@ pub async fn get_missing_events( }) .await; if outlier_missing_prevs > 0 { + trace!("Missing {outlier_missing_prevs} PDU(s) for prev event"); latest_events.push(prev_event_id.to_owned()); } + trace!("Had {prev_event_id} as an outlier already, skipping discovery"); discovered.insert(prev_event_id.to_owned(), outlier); continue; } + trace!("Missing prev {prev_event_id} of {event_id}"); latest_events.push(prev_event_id.to_owned()); } - + trace!("Discovered {event_id}"); discovered.insert(event_id.clone(), pdu); }