refactor fetch_unknown_prev_events

Early returns (or continues, in this case) good.
This commit is contained in:
Charles Hall 2024-10-10 16:23:03 -07:00
parent 6cb7896e17
commit d1370f9834
No known key found for this signature in database
GPG key ID: 7B8E0645816E07CF

View file

@ -1442,7 +1442,7 @@ impl Service {
let mut amount = 0; let mut amount = 0;
while let Some(prev_event_id) = todo_outlier_stack.pop() { 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( .fetch_and_handle_outliers(
origin, origin,
&[prev_event_id.clone()], &[prev_event_id.clone()],
@ -1452,27 +1452,38 @@ impl Service {
) )
.await .await
.pop() .pop()
{ else {
graph.insert(prev_event_id.clone(), HashSet::new());
continue;
};
Self::check_room_id(room_id, &pdu)?; Self::check_room_id(room_id, &pdu)?;
if amount > services().globals.max_fetch_prev_events() { if amount > services().globals.max_fetch_prev_events() {
// Max limit reached warn!("Max prev event limit reached");
warn!("Max prev event limit reached!");
graph.insert(prev_event_id.clone(), HashSet::new()); graph.insert(prev_event_id.clone(), HashSet::new());
continue; continue;
} }
if let Some(json) = json_opt.or_else(|| { let Some(json) = json_opt.or_else(|| {
services() services()
.rooms .rooms
.outlier .outlier
.get_outlier_pdu_json(&prev_event_id) .get_outlier_pdu_json(&prev_event_id)
.ok() .ok()
.flatten() .flatten()
}) { }) else {
if pdu.origin_server_ts > first_pdu_in_room.origin_server_ts 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; amount += 1;
for prev_prev in &pdu.prev_events { for prev_prev in &pdu.prev_events {
if !graph.contains_key(prev_prev) { if !graph.contains_key(prev_prev) {
todo_outlier_stack.push(prev_prev.clone()); todo_outlier_stack.push(prev_prev.clone());
@ -1483,20 +1494,8 @@ impl Service {
prev_event_id.clone(), prev_event_id.clone(),
pdu.prev_events.iter().cloned().collect(), 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)); 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
graph.insert(prev_event_id.clone(), HashSet::new());
}
} }
let sorted = let sorted =