Skip already-accepted events from inclusion in recursive evals.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2026-03-04 02:37:14 +00:00
parent 6d39c40a8a
commit ab1cbbc8ab

View File

@@ -8,6 +8,7 @@ use ruma::{
use tuwunel_core::{
Result, debug_warn, err, implement,
matrix::{Event, PduEvent},
utils::stream::IterStream,
};
use super::check_room_id;
@@ -32,14 +33,27 @@ where
Events: Iterator<Item = &'a EventId> + Send,
{
let mut todo_outlier_stack: FuturesOrdered<_> = initial_set
.stream()
.map(ToOwned::to_owned)
.filter_map(async |event_id| {
self.services
.timeline
.non_outlier_pdu_exists(&event_id)
.await
.is_err()
.then_some(event_id)
})
.map(async |event_id| {
let fetch = self.fetch_auth(origin, room_id, once(event_id.as_ref()), room_version);
let events = once(event_id.as_ref());
let auth = self
.fetch_auth(origin, room_id, events, room_version)
.await;
(event_id.clone(), fetch.await)
(event_id, auth)
})
.map(FutureExt::boxed)
.collect();
.collect()
.await;
let mut amount = 0;
let mut eventid_info = HashMap::new();
@@ -78,21 +92,20 @@ where
if pdu.origin_server_ts() > first_ts_in_room {
amount = amount.saturating_add(1);
for prev_prev in pdu.prev_events() {
if !graph.contains_key(prev_prev) {
let prev_prev = prev_prev.to_owned();
let fetch = async move {
let fetch = self.fetch_auth(
origin,
room_id,
once(prev_prev.as_ref()),
room_version,
);
(prev_prev.clone(), fetch.await)
};
todo_outlier_stack.push_back(fetch.boxed());
if graph.contains_key(prev_prev) {
continue;
}
let prev_prev = prev_prev.to_owned();
let fetch = async move {
let fetch = self
.fetch_auth(origin, room_id, once(prev_prev.as_ref()), room_version)
.await;
(prev_prev, fetch)
};
todo_outlier_stack.push_back(fetch.boxed());
}
graph.insert(