fix: also fetch prev events that are outliers already

merge-requests/157/head
Timo Kösters 3 years ago
parent ecd1e45a44
commit f9a2edc0dd
No known key found for this signature in database
GPG Key ID: 356E705610F626D5

@ -844,6 +844,19 @@ impl Rooms {
.transpose() .transpose()
} }
/// Returns the json of a pdu.
pub fn get_outlier_pdu_json(
&self,
event_id: &EventId,
) -> Result<Option<CanonicalJsonObject>> {
self.eventid_outlierpdu
.get(event_id.as_bytes())?
.map(|pdu| {
serde_json::from_slice(&pdu).map_err(|_| Error::bad_database("Invalid PDU in db."))
})
.transpose()
}
/// Returns the json of a pdu. /// Returns the json of a pdu.
pub fn get_non_outlier_pdu_json( pub fn get_non_outlier_pdu_json(
&self, &self,

@ -887,10 +887,10 @@ pub async fn handle_incoming_pdu<'a>(
let mut todo_outlier_stack = incoming_pdu.prev_events.clone(); let mut todo_outlier_stack = incoming_pdu.prev_events.clone();
let mut todo_timeline_stack = Vec::new(); let mut todo_timeline_stack = Vec::new();
while let Some(prev_event_id) = todo_outlier_stack.pop() { while let Some(prev_event_id) = todo_outlier_stack.pop() {
if let Some((pdu, Some(json))) = fetch_and_handle_outliers( if let Some((pdu, json_opt)) = fetch_and_handle_outliers(
db, db,
origin, origin,
&[prev_event_id], &[prev_event_id.clone()],
&create_event, &create_event,
&room_id, &room_id,
pub_key_map, pub_key_map,
@ -898,6 +898,7 @@ pub async fn handle_incoming_pdu<'a>(
.await .await
.pop() .pop()
{ {
if let Some(json) = json_opt.or_else(|| db.rooms.get_outlier_pdu_json(&prev_event_id).ok().flatten()) {
if incoming_pdu.origin_server_ts if incoming_pdu.origin_server_ts
> db.rooms > db.rooms
.first_pdu_in_room(&room_id) .first_pdu_in_room(&room_id)
@ -910,6 +911,7 @@ pub async fn handle_incoming_pdu<'a>(
} }
} }
} }
}
while let Some(prev) = todo_timeline_stack.pop() { while let Some(prev) = todo_timeline_stack.pop() {
upgrade_outlier_to_timeline_pdu( upgrade_outlier_to_timeline_pdu(

Loading…
Cancel
Save