diff --git a/src/api/client/keys.rs b/src/api/client/keys.rs index 53ec12f9..18f7d21c 100644 --- a/src/api/client/keys.rs +++ b/src/api/client/keys.rs @@ -1,10 +1,7 @@ -use std::{ - collections::{hash_map, BTreeMap, HashMap, HashSet}, - time::Instant, -}; +use std::collections::{BTreeMap, HashMap, HashSet}; use axum::extract::State; -use conduit::{err, utils, utils::math::continue_exponential_backoff_secs, Err, Error, Result}; +use conduit::{err, utils, Error, Result}; use futures::{stream::FuturesUnordered, StreamExt}; use ruma::{ api::{ @@ -345,41 +342,9 @@ where let mut failures = BTreeMap::new(); - let back_off = |id| async { - match services - .globals - .bad_query_ratelimiter - .write() - .expect("locked") - .entry(id) - { - hash_map::Entry::Vacant(e) => { - e.insert((Instant::now(), 1)); - }, - hash_map::Entry::Occupied(mut e) => { - *e.get_mut() = (Instant::now(), e.get().1.saturating_add(1)); - }, - } - }; - let mut futures: FuturesUnordered<_> = get_over_federation .into_iter() .map(|(server, vec)| async move { - if let Some((time, tries)) = services - .globals - .bad_query_ratelimiter - .read() - .expect("locked") - .get(server) - { - // Exponential backoff - const MIN: u64 = 5 * 60; - const MAX: u64 = 60 * 60 * 24; - if continue_exponential_backoff_secs(MIN, MAX, time.elapsed(), *tries) { - return (server, Err!(BadServerResponse("bad query from {server:?}, still backing off"))); - } - } - let mut device_keys_input_fed = BTreeMap::new(); for (user_id, keys) in vec { device_keys_input_fed.insert(user_id.to_owned(), keys.clone()); @@ -388,17 +353,18 @@ where let request = federation::keys::get_keys::v1::Request { device_keys: device_keys_input_fed, }; + let response = services .sending .send_federation_request(server, request) .await; - (server, Ok(response)) + (server, response) }) .collect(); while let Some((server, response)) = futures.next().await { - if let Ok(Ok(response)) = response { + if let Ok(response) = response { for (user, master_key) in response.master_keys { let (master_key_id, mut master_key) = parse_master_key(&user, &master_key)?; @@ -426,7 +392,6 @@ where self_signing_keys.extend(response.self_signing_keys); device_keys.extend(response.device_keys); } else { - back_off(server.to_owned()).await; failures.insert(server.to_string(), json!({})); } } diff --git a/src/service/globals/mod.rs b/src/service/globals/mod.rs index fefff3b5..081794e2 100644 --- a/src/service/globals/mod.rs +++ b/src/service/globals/mod.rs @@ -21,7 +21,6 @@ pub struct Service { pub config: Config, jwt_decoding_key: Option, pub bad_event_ratelimiter: Arc>>, - pub bad_query_ratelimiter: Arc>>, pub stateres_mutex: Arc>, pub server_user: OwnedUserId, pub admin_alias: OwnedRoomAliasId, @@ -71,7 +70,6 @@ impl crate::Service for Service { config: config.clone(), jwt_decoding_key, bad_event_ratelimiter: Arc::new(RwLock::new(HashMap::new())), - bad_query_ratelimiter: Arc::new(RwLock::new(HashMap::new())), stateres_mutex: Arc::new(Mutex::new(())), admin_alias: RoomAliasId::parse(format!("#admins:{}", &config.server_name)) .expect("#admins:server_name is valid alias name"), @@ -100,13 +98,6 @@ impl crate::Service for Service { .len(); writeln!(out, "bad_event_ratelimiter: {bad_event_ratelimiter}")?; - let bad_query_ratelimiter = self - .bad_query_ratelimiter - .read() - .expect("locked for reading") - .len(); - writeln!(out, "bad_query_ratelimiter: {bad_query_ratelimiter}")?; - Ok(()) } @@ -115,11 +106,6 @@ impl crate::Service for Service { .write() .expect("locked for writing") .clear(); - - self.bad_query_ratelimiter - .write() - .expect("locked for writing") - .clear(); } fn name(&self) -> &str { service::make_name(std::module_path!()) }