Fix unnecessary backfill requests after reaching m.room.create.

Cleanup condition.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-08-30 11:40:23 +00:00
parent 616f20f273
commit 7c19d1e1ff

View File

@@ -32,13 +32,18 @@ use super::ExtractBody;
#[implement(super::Service)]
#[tracing::instrument(name = "backfill", level = "debug", skip(self))]
pub async fn backfill_if_required(&self, room_id: &RoomId, from: PduCount) -> Result {
let first_pdu = self
let (first_pdu_count, first_pdu) = self
.first_item_in_room(room_id)
.await
.expect("Room is not empty");
// No backfill required, there are still events between them
if first_pdu.0 < from {
if first_pdu_count < from {
return Ok(());
}
// No backfill required, reached the end.
if *first_pdu.event_type() == TimelineEventType::RoomCreate {
return Ok(());
}
@@ -77,13 +82,8 @@ pub async fn backfill_if_required(&self, room_id: &RoomId, from: PduCount) -> Re
.users
.iter()
.filter_map(|(user_id, level)| {
if level > &power_levels.users_default
&& !self.services.globals.user_is_local(user_id)
{
Some(user_id.server_name())
} else {
None
}
(*level > power_levels.users_default && !self.services.globals.user_is_local(user_id))
.then_some(user_id.server_name())
});
let canonical_room_alias_server = once(canonical_alias)
@@ -118,7 +118,7 @@ pub async fn backfill_if_required(&self, room_id: &RoomId, from: PduCount) -> Re
while let Some(ref backfill_server) = servers.next().await {
let request = federation::backfill::get_backfill::v1::Request {
room_id: room_id.to_owned(),
v: vec![first_pdu.1.event_id().to_owned()],
v: vec![first_pdu.event_id().to_owned()],
limit: uint!(100),
};