From a916fdf09a67e4b70acafe434e31d2c234a76aff Mon Sep 17 00:00:00 2001 From: timedout Date: Tue, 18 Aug 2026 02:38:50 +0100 Subject: [PATCH] fix: Mark even more error codes as stale based on observed data --- src/service/federation/mod.rs | 10 +++++++++- src/service/sending/sender.rs | 5 ++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/service/federation/mod.rs b/src/service/federation/mod.rs index 21e9c8f2c..80a048f7f 100644 --- a/src/service/federation/mod.rs +++ b/src/service/federation/mod.rs @@ -184,7 +184,15 @@ pub fn should_mark_stale(&self, error: &Error) -> bool { } } - error.status_code() == StatusCode::MISDIRECTED_REQUEST + match error.status_code() { + // Some special servers account for this specifically + | StatusCode::MISDIRECTED_REQUEST + // Common error codes observed for misdirected requests + // | StatusCode::NOT_FOUND This one can be encountered naturally + | StatusCode::METHOD_NOT_ALLOWED + | StatusCode::IM_A_TEAPOT => true, + _ => false, + } } /// Returns a clone of the internal remote health tracking map. diff --git a/src/service/sending/sender.rs b/src/service/sending/sender.rs index cc9e4ec4b..6fb402ee6 100644 --- a/src/service/sending/sender.rs +++ b/src/service/sending/sender.rs @@ -30,6 +30,7 @@ join, pin_mut, stream::FuturesUnordered, }; +use http::StatusCode; use ruma::{ CanonicalJsonObject, MilliSecondsSinceUnixEpoch, OwnedRoomId, OwnedServerName, OwnedUserId, RoomId, ServerName, UInt, @@ -145,7 +146,9 @@ async fn handle_response<'a>( | Ok(dest) => self.handle_response_ok(&dest, futures, statuses).await, | Err((dest, e)) => { if let Destination::Federation(dest) = &dest { - if self.services.federation.should_mark_stale(&e) { + if self.services.federation.should_mark_stale(&e) + || e.status_code() == StatusCode::NOT_FOUND + { debug!("{dest} is now unhealthy & stale due to a connect error: {e:?}"); self.services.federation.mark_destination_stale(dest); self.services.federation.hit_unhealthy(dest.clone());