Merge branch 'dns_config_cleanups' into 'main'

Small cleanups to stream timeout configurations

See merge request tpo/core/arti!179
This commit is contained in:
eta 2021-12-07 20:00:31 +00:00
commit 333d85a0d8
4 changed files with 38 additions and 33 deletions

View File

@ -173,7 +173,7 @@ impl<R: Runtime> TorClient<R> {
); );
} }
let addr_cfg = config.address_filter.clone(); let addr_cfg = config.address_filter.clone();
let timeout_cfg = config.timeout_rules.clone(); let timeout_cfg = config.stream_timeouts.clone();
let chanmgr = Arc::new(tor_chanmgr::ChanMgr::new(runtime.clone())); let chanmgr = Arc::new(tor_chanmgr::ChanMgr::new(runtime.clone()));
let circmgr = let circmgr =
tor_circmgr::CircMgr::new(circ_cfg, statemgr.clone(), &runtime, Arc::clone(&chanmgr))?; tor_circmgr::CircMgr::new(circ_cfg, statemgr.clone(), &runtime, Arc::clone(&chanmgr))?;
@ -265,7 +265,7 @@ impl<R: Runtime> TorClient<R> {
// This timeout is needless but harmless for optimistic streams. // This timeout is needless but harmless for optimistic streams.
let stream = self let stream = self
.runtime .runtime
.timeout(self.timeoutcfg.stream_timeout, stream_future) .timeout(self.timeoutcfg.connect_timeout, stream_future)
.await??; .await??;
Ok(stream) Ok(stream)

View File

@ -57,20 +57,20 @@ pub struct ClientAddrConfig {
pub struct ClientTimeoutConfig { pub struct ClientTimeoutConfig {
/// How long should we wait before timing out a stream when connecting /// How long should we wait before timing out a stream when connecting
/// to a host? /// to a host?
#[builder(default = "default_dns_stream_timeout()")] #[builder(default = "default_connect_timeout()")]
#[serde(with = "humantime_serde", default = "default_dns_stream_timeout")] #[serde(with = "humantime_serde", default = "default_connect_timeout")]
pub stream_timeout: Duration, pub(crate) connect_timeout: Duration,
/// How long should we wait before timing out when resolving a DNS record? /// How long should we wait before timing out when resolving a DNS record?
#[builder(default = "default_dns_resolve_timeout()")] #[builder(default = "default_dns_resolve_timeout()")]
#[serde(with = "humantime_serde", default = "default_dns_resolve_timeout")] #[serde(with = "humantime_serde", default = "default_dns_resolve_timeout")]
pub resolve_timeout: Duration, pub(crate) resolve_timeout: Duration,
/// How long should we wait before timing out when resolving a DNS /// How long should we wait before timing out when resolving a DNS
/// PTR record? /// PTR record?
#[builder(default = "default_dns_resolve_ptr_timeout()")] #[builder(default = "default_dns_resolve_ptr_timeout()")]
#[serde(with = "humantime_serde", default = "default_dns_resolve_ptr_timeout")] #[serde(with = "humantime_serde", default = "default_dns_resolve_ptr_timeout")]
pub resolve_ptr_timeout: Duration, pub(crate) resolve_ptr_timeout: Duration,
} }
// NOTE: it seems that `unwrap` may be safe because of builder defaults // NOTE: it seems that `unwrap` may be safe because of builder defaults
@ -109,7 +109,7 @@ impl From<ClientTimeoutConfig> for ClientTimeoutConfigBuilder {
fn from(cfg: ClientTimeoutConfig) -> ClientTimeoutConfigBuilder { fn from(cfg: ClientTimeoutConfig) -> ClientTimeoutConfigBuilder {
let mut builder = ClientTimeoutConfigBuilder::default(); let mut builder = ClientTimeoutConfigBuilder::default();
builder builder
.stream_timeout(cfg.stream_timeout) .connect_timeout(cfg.connect_timeout)
.resolve_timeout(cfg.resolve_timeout) .resolve_timeout(cfg.resolve_timeout)
.resolve_ptr_timeout(cfg.resolve_ptr_timeout); .resolve_ptr_timeout(cfg.resolve_ptr_timeout);
@ -125,7 +125,7 @@ impl ClientTimeoutConfig {
} }
/// Return the default stream timeout /// Return the default stream timeout
fn default_dns_stream_timeout() -> Duration { fn default_connect_timeout() -> Duration {
Duration::new(10, 0) Duration::new(10, 0)
} }
@ -263,8 +263,8 @@ pub struct TorClientConfig {
/// Rules about which addresses the client is willing to connect to. /// Rules about which addresses the client is willing to connect to.
pub(crate) address_filter: ClientAddrConfig, pub(crate) address_filter: ClientAddrConfig,
/// Rules about client DNS configuration /// Information about timing out client requests.
pub(crate) timeout_rules: ClientTimeoutConfig, pub(crate) stream_timeouts: ClientTimeoutConfig,
} }
impl Default for TorClientConfig { impl Default for TorClientConfig {
@ -326,8 +326,9 @@ pub struct TorClientConfigBuilder {
circuit_timing: circ::CircuitTimingBuilder, circuit_timing: circ::CircuitTimingBuilder,
/// Inner builder for the `address_filter` section. /// Inner builder for the `address_filter` section.
address_filter: ClientAddrConfigBuilder, address_filter: ClientAddrConfigBuilder,
/// Inner builder for the `timeout_rules` section. /// Inner builder for the `stream_timeouts
timeout_rules: ClientTimeoutConfigBuilder, //` section.
stream_timeouts: ClientTimeoutConfigBuilder,
} }
impl TorClientConfigBuilder { impl TorClientConfigBuilder {
@ -359,10 +360,10 @@ impl TorClientConfigBuilder {
.address_filter .address_filter
.build() .build()
.map_err(|e| e.within("address_filter"))?; .map_err(|e| e.within("address_filter"))?;
let timeout_rules = self let stream_timeouts = self
.timeout_rules .stream_timeouts
.build() .build()
.map_err(|e| e.within("timeout_rules"))?; .map_err(|e| e.within("stream_timeouts"))?;
Ok(TorClientConfig { Ok(TorClientConfig {
tor_network, tor_network,
@ -373,7 +374,7 @@ impl TorClientConfigBuilder {
preemptive_circuits, preemptive_circuits,
circuit_timing, circuit_timing,
address_filter, address_filter,
timeout_rules, stream_timeouts,
}) })
} }
@ -481,7 +482,7 @@ impl From<TorClientConfig> for TorClientConfigBuilder {
preemptive_circuits, preemptive_circuits,
circuit_timing, circuit_timing,
address_filter, address_filter,
timeout_rules, stream_timeouts,
} = cfg; } = cfg;
TorClientConfigBuilder { TorClientConfigBuilder {
@ -493,7 +494,7 @@ impl From<TorClientConfig> for TorClientConfigBuilder {
preemptive_circuits: preemptive_circuits.into(), preemptive_circuits: preemptive_circuits.into(),
circuit_timing: circuit_timing.into(), circuit_timing: circuit_timing.into(),
address_filter: address_filter.into(), address_filter: address_filter.into(),
timeout_rules: timeout_rules.into(), stream_timeouts: stream_timeouts.into(),
} }
} }
} }

View File

@ -138,11 +138,15 @@ request_loyalty = "50 msec"
# Should we allow attempts to make Tor connections to local addresses? # Should we allow attempts to make Tor connections to local addresses?
allow_local_addrs = false allow_local_addrs = false
# Rules for a circuit timeouts # Rules for how long streams should wait when connecting to host or performing a
[timeout_rules] # DNS lookup.
#
# These timeouts measure the permitted time between sending a request on an
# established circuit, and getting a response from the exit node.
[stream_timeouts]
# How long should we wait before timing out a stream when connecting to a host? # How long should we wait before timing out a stream when connecting to a host?
stream_timeout = "10 sec" connect_timeout = "10 sec"
# How long should we wait before timing out when resolving a DNS record? # How long should we wait before timing out when resolving a DNS record?
resolve_timeout = "10 sec" resolve_timeout = "10 sec"

View File

@ -161,8 +161,8 @@ pub struct ArtiConfig {
/// Rules about which addresses the client is willing to connect to. /// Rules about which addresses the client is willing to connect to.
address_filter: ClientAddrConfig, address_filter: ClientAddrConfig,
/// Rules about a client's DNS resolution. /// Information about when to time out client requests.
timeout_rules: ClientTimeoutConfig, stream_timeouts: ClientTimeoutConfig,
} }
impl From<ArtiConfig> for TorClientConfigBuilder { impl From<ArtiConfig> for TorClientConfigBuilder {
@ -242,8 +242,8 @@ pub struct ArtiConfigBuilder {
circuit_timing: circ::CircuitTimingBuilder, circuit_timing: circ::CircuitTimingBuilder,
/// Builder for the address_filter section. /// Builder for the address_filter section.
address_filter: ClientAddrConfigBuilder, address_filter: ClientAddrConfigBuilder,
/// Builder for the DNS resolution rules. /// Builder for the stream timeout rules.
timeout_rules: ClientTimeoutConfigBuilder, stream_timeouts: ClientTimeoutConfigBuilder,
} }
impl ArtiConfigBuilder { impl ArtiConfigBuilder {
@ -277,10 +277,10 @@ impl ArtiConfigBuilder {
.address_filter .address_filter
.build() .build()
.map_err(|e| e.within("address_filter"))?; .map_err(|e| e.within("address_filter"))?;
let timeout_rules = self let stream_timeouts = self
.timeout_rules .stream_timeouts
.build() .build()
.map_err(|e| e.within("timeout_rules"))?; .map_err(|e| e.within("stream_timeouts"))?;
Ok(ArtiConfig { Ok(ArtiConfig {
proxy, proxy,
logging, logging,
@ -292,7 +292,7 @@ impl ArtiConfigBuilder {
preemptive_circuits, preemptive_circuits,
circuit_timing, circuit_timing,
address_filter, address_filter,
timeout_rules, stream_timeouts,
}) })
} }
@ -389,8 +389,8 @@ impl ArtiConfigBuilder {
/// ///
/// This section controls how Arti should handle an exit relay's DNS /// This section controls how Arti should handle an exit relay's DNS
/// resolution. /// resolution.
pub fn timeout_rules(&mut self) -> &mut ClientTimeoutConfigBuilder { pub fn stream_timeouts(&mut self) -> &mut ClientTimeoutConfigBuilder {
&mut self.timeout_rules &mut self.stream_timeouts
} }
} }
@ -407,7 +407,7 @@ impl From<ArtiConfig> for ArtiConfigBuilder {
preemptive_circuits: cfg.preemptive_circuits.into(), preemptive_circuits: cfg.preemptive_circuits.into(),
circuit_timing: cfg.circuit_timing.into(), circuit_timing: cfg.circuit_timing.into(),
address_filter: cfg.address_filter.into(), address_filter: cfg.address_filter.into(),
timeout_rules: cfg.timeout_rules.into(), stream_timeouts: cfg.stream_timeouts.into(),
} }
} }
} }