optimize override ips; utilize all ips from cache
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
f746be82c1
commit
1f1e2d547c
3 changed files with 15 additions and 13 deletions
|
@ -10,7 +10,7 @@ use ipaddress::IPAddress;
|
|||
use ruma::ServerName;
|
||||
|
||||
use super::{
|
||||
cache::{CachedDest, CachedOverride},
|
||||
cache::{CachedDest, CachedOverride, MAX_IPS},
|
||||
fed::{add_port_to_hostname, get_ip_with_port, FedDest, PortString},
|
||||
};
|
||||
|
||||
|
@ -266,9 +266,9 @@ impl super::Service {
|
|||
}
|
||||
|
||||
self.set_cached_override(
|
||||
overname.to_owned(),
|
||||
overname,
|
||||
CachedOverride {
|
||||
ips: override_ip.iter().collect(),
|
||||
ips: override_ip.into_iter().take(MAX_IPS).collect(),
|
||||
port,
|
||||
expire: CachedOverride::default_expire(),
|
||||
},
|
||||
|
|
|
@ -5,6 +5,7 @@ use std::{
|
|||
time::SystemTime,
|
||||
};
|
||||
|
||||
use arrayvec::ArrayVec;
|
||||
use conduit::{trace, utils::rand};
|
||||
use ruma::{OwnedServerName, ServerName};
|
||||
|
||||
|
@ -24,7 +25,7 @@ pub struct CachedDest {
|
|||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct CachedOverride {
|
||||
pub ips: Vec<IpAddr>,
|
||||
pub ips: IpAddrs,
|
||||
pub port: u16,
|
||||
pub expire: SystemTime,
|
||||
}
|
||||
|
@ -32,6 +33,9 @@ pub struct CachedOverride {
|
|||
pub type WellKnownMap = HashMap<OwnedServerName, CachedDest>;
|
||||
pub type TlsNameMap = HashMap<String, CachedOverride>;
|
||||
|
||||
pub type IpAddrs = ArrayVec<IpAddr, MAX_IPS>;
|
||||
pub(crate) const MAX_IPS: usize = 3;
|
||||
|
||||
impl Cache {
|
||||
pub(super) fn new() -> Arc<Self> {
|
||||
Arc::new(Self {
|
||||
|
@ -61,13 +65,13 @@ impl super::Service {
|
|||
.cloned()
|
||||
}
|
||||
|
||||
pub fn set_cached_override(&self, name: String, over: CachedOverride) -> Option<CachedOverride> {
|
||||
pub fn set_cached_override(&self, name: &str, over: CachedOverride) -> Option<CachedOverride> {
|
||||
trace!(?name, ?over, "set cached override");
|
||||
self.cache
|
||||
.overrides
|
||||
.write()
|
||||
.expect("locked for writing")
|
||||
.insert(name, over)
|
||||
.insert(name.into(), over)
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use std::{iter, net::SocketAddr, sync::Arc, time::Duration};
|
||||
use std::{net::SocketAddr, sync::Arc, time::Duration};
|
||||
|
||||
use conduit::{err, Result, Server};
|
||||
use futures::FutureExt;
|
||||
|
@ -101,14 +101,12 @@ impl Resolve for Hooked {
|
|||
}
|
||||
|
||||
async fn cached_to_reqwest(cached: CachedOverride) -> ResolvingResult {
|
||||
let first_ip = cached
|
||||
let addrs = cached
|
||||
.ips
|
||||
.first()
|
||||
.expect("must provide at least one override");
|
||||
.into_iter()
|
||||
.map(move |ip| SocketAddr::new(ip, cached.port));
|
||||
|
||||
let saddr = SocketAddr::new(*first_ip, cached.port);
|
||||
|
||||
Ok(Box::new(iter::once(saddr)))
|
||||
Ok(Box::new(addrs))
|
||||
}
|
||||
|
||||
async fn resolve_to_reqwest(resolver: Arc<TokioAsyncResolver>, name: Name) -> ResolvingResult {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue