Fill event_map with all events that will be needed for resolution

next
Devin Ragotzy 2021-01-06 15:05:09 -05:00 committed by Devin Ragotzy
parent 8de0d9f9ce
commit 168ae8dca0
2 changed files with 22 additions and 11 deletions

2
Cargo.lock generated
View File

@ -212,8 +212,8 @@ dependencies = [
"js_int", "js_int",
"jsonwebtoken", "jsonwebtoken",
"log", "log",
"regex",
"rand 0.7.3", "rand 0.7.3",
"regex",
"reqwest", "reqwest",
"ring", "ring",
"rocket", "rocket",

View File

@ -565,7 +565,7 @@ pub async fn send_transaction_message_route<'a>(
for pdu in &body.pdus { for pdu in &body.pdus {
// 1. Is a valid event, otherwise it is dropped. // 1. Is a valid event, otherwise it is dropped.
// Ruma/PduEvent/StateEvent satisfies this // Ruma/PduEvent/StateEvent satisfies this
// TODO: ruma may solve this but our `process_incoming_pdu` needs to return a Result then
let (event_id, value) = crate::pdu::process_incoming_pdu(pdu); let (event_id, value) = crate::pdu::process_incoming_pdu(pdu);
// 2. Passes signature checks, otherwise event is dropped. // 2. Passes signature checks, otherwise event is dropped.
@ -741,16 +741,24 @@ pub async fn send_transaction_message_route<'a>(
let auth_events = fork_states let auth_events = fork_states
.iter() .iter()
.map(|map| { .map(|map| {
db.rooms.auth_events_full( db.rooms
.auth_events_full(
pdu.room_id(), pdu.room_id(),
&map.values() &map.values()
.map(|pdu| pdu.event_id().clone()) .map(|pdu| pdu.event_id().clone())
.collect::<Vec<_>>(), .collect::<Vec<_>>(),
) )
.map(|pdus| pdus.into_iter().map(Arc::new).collect::<Vec<_>>())
}) })
.collect(); .collect::<Result<Vec<_>>>()?;
// Add as much as we can to the `event_map` (less DB hits) // Add everything we will need to event_map
event_map.extend(
auth_events
.iter()
.map(|pdus| pdus.iter().map(|pdu| (pdu.event_id().clone(), pdu.clone())))
.flatten(),
);
event_map.extend( event_map.extend(
incoming_auth_events incoming_auth_events
.into_iter() .into_iter()
@ -773,7 +781,10 @@ pub async fn send_transaction_message_route<'a>(
.collect::<StateMap<_>>() .collect::<StateMap<_>>()
}) })
.collect::<Vec<_>>(), .collect::<Vec<_>>(),
&auth_events, auth_events
.into_iter()
.map(|pdus| pdus.into_iter().map(|pdu| pdu.event_id().clone()).collect())
.collect(),
&mut event_map, &mut event_map,
) { ) {
Ok(res) => res Ok(res) => res