fix: also fetch prev events that are outliers already
parent
ecd1e45a44
commit
f9a2edc0dd
|
@ -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,15 +898,17 @@ pub async fn handle_incoming_pdu<'a>(
|
||||||
.await
|
.await
|
||||||
.pop()
|
.pop()
|
||||||
{
|
{
|
||||||
if incoming_pdu.origin_server_ts
|
if let Some(json) = json_opt.or_else(|| db.rooms.get_outlier_pdu_json(&prev_event_id).ok().flatten()) {
|
||||||
> db.rooms
|
if incoming_pdu.origin_server_ts
|
||||||
.first_pdu_in_room(&room_id)
|
> db.rooms
|
||||||
.map_err(|_| "Error loading first room event.".to_owned())?
|
.first_pdu_in_room(&room_id)
|
||||||
.expect("Room exists")
|
.map_err(|_| "Error loading first room event.".to_owned())?
|
||||||
.origin_server_ts
|
.expect("Room exists")
|
||||||
{
|
.origin_server_ts
|
||||||
todo_outlier_stack.extend(pdu.prev_events.iter().cloned());
|
{
|
||||||
todo_timeline_stack.push((pdu, json));
|
todo_outlier_stack.extend(pdu.prev_events.iter().cloned());
|
||||||
|
todo_timeline_stack.push((pdu, json));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue