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 adc09e0f2..05d10736e 100644 --- a/src/service/rooms/event_handler/fetch_and_handle_outliers.rs +++ b/src/service/rooms/event_handler/fetch_and_handle_outliers.rs @@ -35,7 +35,7 @@ /// them in a processable order, so this is just a best effort attempt. It does /// not account for power levels or other tie breaks. pub async fn build_local_dag( - pdu_map: &HashMap, + pdu_map: &HashMap, ) -> conduwuit::Result> { debug_assert!(pdu_map.len() >= 2, "needless call to build_local_dag with less than 2 PDUs"); let mut dag: HashMap> = @@ -237,7 +237,6 @@ pub(super) async fn fetch_and_handle_missing_events<'a, Pdu>( } // Insert this PDU back at the end of the queue so that it will be resolved once // all of its auth events have been fetched. - // TODO: This may result in infinite looping, needs a breaker if have_all_auth { debug!(elapsed=?start.elapsed(),%next_id, "Have all auth events"); discovered_events.insert(next_id, value); @@ -251,12 +250,13 @@ pub(super) async fn fetch_and_handle_missing_events<'a, Pdu>( } } - let seeded_ordered = build_local_dag( - &discovered_events.clone(), /* TODO: this clones like several megabytes of data, - * owie :( */ - ) - .await - .expect("failed to build local DAG"); + let refmap: HashMap = discovered_events + .iter() + .map(|(id, data)| (id.clone(), data)) + .collect(); + let seeded_ordered = build_local_dag(&refmap) + .await + .expect("failed to build local DAG"); let mut pdus = HashMap::with_capacity(seeded_ordered.len()); for id in seeded_ordered { let pdu_json = discovered_events.remove(&id).unwrap(); @@ -279,10 +279,6 @@ pub(super) async fn fetch_and_handle_missing_events<'a, Pdu>( | Err(e) => warn!(elapsed=?start.elapsed(),"Authentication of event {id} failed: {e:?}"), } - - // TODO: should this try to promote to timeline? - // If we got here, we probably weren't able to promote it before - // now. } trace!(elapsed=?start.elapsed(),"Finished fetch_and_handle_missing_events: fetched and handled {} missing PDUs", pdus.len()); diff --git a/src/service/rooms/event_handler/fetch_prev.rs b/src/service/rooms/event_handler/fetch_prev.rs index e9a883c33..5f618a66c 100644 --- a/src/service/rooms/event_handler/fetch_prev.rs +++ b/src/service/rooms/event_handler/fetch_prev.rs @@ -5,7 +5,7 @@ utils::{BoolExt, IterStream, stream::BroadbandExt}, }; use futures::StreamExt; -use ruma::{RoomId, ServerName}; +use ruma::{CanonicalJsonObject, OwnedEventId, RoomId, ServerName}; use crate::rooms::event_handler::build_local_dag; @@ -78,7 +78,9 @@ pub(super) async fn fetch_prevs( let to_persist = if mapped.len() <= 1 { mapped.keys().map(ToOwned::to_owned).collect() } else { - build_local_dag(&mapped).await? + let refmap: HashMap = + mapped.iter().map(|(id, data)| (id.clone(), data)).collect(); + build_local_dag(&refmap).await? }; let job_start = Instant::now();