Fill event_map with all events that will be needed for resolution

This commit is contained in:
Devin Ragotzy 2021-01-06 15:05:09 -05:00 committed by Timo Kösters
parent 8a035880f0
commit 88f3ee489b
No known key found for this signature in database
GPG key ID: 24DA7517711A2BA4
2 changed files with 22 additions and 11 deletions

2
Cargo.lock generated
View file

@ -197,8 +197,8 @@ dependencies = [
"http",
"image",
"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