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",
"jsonwebtoken",
"log",
"regex",
"rand 0.7.3",
"regex",
"reqwest",
"ring",
"rocket",

View File

@ -565,7 +565,7 @@ pub async fn send_transaction_message_route<'a>(
for pdu in &body.pdus {
// 1. Is a valid event, otherwise it is dropped.
// 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);
// 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
.iter()
.map(|map| {
db.rooms.auth_events_full(
pdu.room_id(),
&map.values()
.map(|pdu| pdu.event_id().clone())
.collect::<Vec<_>>(),
)
db.rooms
.auth_events_full(
pdu.room_id(),
&map.values()
.map(|pdu| pdu.event_id().clone())
.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(
incoming_auth_events
.into_iter()
@ -773,7 +781,10 @@ pub async fn send_transaction_message_route<'a>(
.collect::<StateMap<_>>()
})
.collect::<Vec<_>>(),
&auth_events,
auth_events
.into_iter()
.map(|pdus| pdus.into_iter().map(|pdu| pdu.event_id().clone()).collect())
.collect(),
&mut event_map,
) {
Ok(res) => res