feat: Update servers-in-backoff command to annotate stale info

This commit is contained in:
timedout authored and Ellis Git committed 2026-08-20 00:57:11 +00:00
1 parent ef5bf7c977
commit 9ed8c230fa
2 files changed
+21 -14

No files matched your search

+12 -10
View File
@@ -1243,16 +1243,14 @@ impl crate::Context<'_> {
room_id: Option<OwnedRoomId>,
name: Option<OwnedServerName>,
) -> Result {
let backoff_map = {
// We can't send the backoff map to another thread, so we clone it here.
let map = self.services.federation.remote_health.read();
map.clone()
};
let backoff_map = self.services.federation.remote_health();
if backoff_map.is_empty() {
return Err!("No servers in backoff.");
}
let stale_map = self.services.federation.stale_destinations();
if let Some(specific_server_name) = name {
let entry = backoff_map.get(&specific_server_name);
return match entry {
@@ -1267,9 +1265,9 @@ impl crate::Context<'_> {
};
}
self.write_str("| Server Name | Retries | Next connection attempt |\n")
self.write_str("| Server Name | Retries | Next connection attempt | Is stale |\n")
.await?;
self.write_str("| ----------- | ------- | ----------------------- |\n")
self.write_str("| ----------- | ------- | ----------------------- | -------- |\n")
.await?;
if let Some(specific_room) = room_id {
@@ -1277,15 +1275,19 @@ impl crate::Context<'_> {
self.services.rooms.state_cache.room_servers(&specific_room);
while let Some(server_name) = servers_in_room.next().await {
let Some((retries, retry_at)) = backoff_map.get(&server_name) else { continue };
self.write_str(&format!("| {server_name} | {retries} | {retry_at} |\n"))
.await?;
let is_stale = if stale_map.contains(&server_name) { "Yes" } else { "No" };
self.write_str(&format!(
"| {server_name} | {retries} | {retry_at} | {is_stale} |\n"
))
.await?;
}
return Ok(());
}
for (server_name, (retries, retry_at)) in &backoff_map {
self.write_str(&format!("| {server_name} | {retries} | {retry_at} |\n"))
let is_stale = if stale_map.contains(server_name) { "Yes" } else { "No" };
self.write_str(&format!("| {server_name} | {retries} | {retry_at} | {is_stale} |\n"))
.await?;
}
+9 -4
View File
@@ -24,7 +24,7 @@ use crate::{Dep, client, moderation, server_keys};
pub struct Service {
services: Services,
pub remote_health: SyncRwLock<HashMap<OwnedServerName, (u32, u64)>>,
stale_destinations: SyncRwLock<HashSet<OwnedServerName>>,
pub stale_destinations: SyncRwLock<HashSet<OwnedServerName>>,
}
struct Services {
@@ -173,8 +173,13 @@ impl Service {
.insert(server_name.to_owned());
}
/// Returns true if the destination has been marked stale.
fn is_destination_stale(&self, server_name: &ServerName) -> bool {
self.stale_destinations.read().contains(server_name)
/// Returns a clone of the internal remote health tracking map.
pub fn remote_health(&self) -> HashMap<OwnedServerName, (u32, u64)> {
self.remote_health.read().clone()
}
/// Returns a clone of the internal stale destinations set.
pub fn stale_destinations(&self) -> HashSet<OwnedServerName> {
self.stale_destinations.read().clone()
}
}