From 44abc4e8ddc74a8c31e1c60376183c0bacd53c8a Mon Sep 17 00:00:00 2001 From: timedout Date: Thu, 6 Aug 2026 15:21:12 +0100 Subject: [PATCH] feat: Hook transaction senders into health tracking --- src/service/sending/sender.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/service/sending/sender.rs b/src/service/sending/sender.rs index 8e473c5a7..c3e886352 100644 --- a/src/service/sending/sender.rs +++ b/src/service/sending/sender.rs @@ -393,6 +393,17 @@ fn should_attempt_send( dest: &Destination, statuses: &mut CurTransactionStatus, ) -> Result<(bool, bool)> { + if let Destination::Federation(server_name) = dest { + let status = statuses + .entry(dest.clone()) + .or_insert(TransactionStatus::Running); + let retry = matches!(status, TransactionStatus::Failed(_, _)); + return match self.services.federation.retry_after(server_name) { + | None => Ok((true, retry)), + | Some(t) => Ok((t.as_millis() > 0, retry)), + }; + } + let (mut allow, mut retry) = (true, false); statuses .entry(dest.clone()) @@ -457,6 +468,8 @@ async fn select_edus(&self, server_name: &ServerName) -> Result<(EduVec, u64)> { events.extend(presence.into_iter().flatten()); events.extend(receipts.into_iter().flatten()); + // TODO(nex): some EDUs like typing need flattening + Ok((events, max_edu_count.load(Ordering::Acquire))) }