diff --git a/src/service/rooms/event_handler.rs b/src/service/rooms/event_handler.rs index 1543e423..cbe8079d 100644 --- a/src/service/rooms/event_handler.rs +++ b/src/service/rooms/event_handler.rs @@ -1442,7 +1442,7 @@ impl Service { let mut amount = 0; while let Some(prev_event_id) = todo_outlier_stack.pop() { - if let Some((pdu, json_opt)) = self + let Some((pdu, json_opt)) = self .fetch_and_handle_outliers( origin, &[prev_event_id.clone()], @@ -1452,51 +1452,50 @@ impl Service { ) .await .pop() - { - Self::check_room_id(room_id, &pdu)?; - - if amount > services().globals.max_fetch_prev_events() { - // Max limit reached - warn!("Max prev event limit reached!"); - graph.insert(prev_event_id.clone(), HashSet::new()); - continue; - } - - if let Some(json) = json_opt.or_else(|| { - services() - .rooms - .outlier - .get_outlier_pdu_json(&prev_event_id) - .ok() - .flatten() - }) { - if pdu.origin_server_ts > first_pdu_in_room.origin_server_ts - { - amount += 1; - for prev_prev in &pdu.prev_events { - if !graph.contains_key(prev_prev) { - todo_outlier_stack.push(prev_prev.clone()); - } - } - - graph.insert( - prev_event_id.clone(), - pdu.prev_events.iter().cloned().collect(), - ); - } else { - // Time based check failed - graph.insert(prev_event_id.clone(), HashSet::new()); - } - - eventid_info.insert(prev_event_id.clone(), (pdu, json)); - } else { - // Get json failed, so this was not fetched over federation - graph.insert(prev_event_id.clone(), HashSet::new()); - } - } else { - // Fetch and handle failed + else { graph.insert(prev_event_id.clone(), HashSet::new()); + continue; + }; + + Self::check_room_id(room_id, &pdu)?; + + if amount > services().globals.max_fetch_prev_events() { + warn!("Max prev event limit reached"); + graph.insert(prev_event_id.clone(), HashSet::new()); + continue; } + + let Some(json) = json_opt.or_else(|| { + services() + .rooms + .outlier + .get_outlier_pdu_json(&prev_event_id) + .ok() + .flatten() + }) else { + graph.insert(prev_event_id.clone(), HashSet::new()); + continue; + }; + + if pdu.origin_server_ts <= first_pdu_in_room.origin_server_ts { + graph.insert(prev_event_id.clone(), HashSet::new()); + continue; + } + + amount += 1; + + for prev_prev in &pdu.prev_events { + if !graph.contains_key(prev_prev) { + todo_outlier_stack.push(prev_prev.clone()); + } + } + + graph.insert( + prev_event_id.clone(), + pdu.prev_events.iter().cloned().collect(), + ); + + eventid_info.insert(prev_event_id.clone(), (pdu, json)); } let sorted =