summaryrefslogtreecommitdiff
path: root/crates/tor-memtrack/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/tor-memtrack/src/config.rs')
-rw-r--r--crates/tor-memtrack/src/config.rs103
1 files changed, 0 insertions, 103 deletions
diff --git a/crates/tor-memtrack/src/config.rs b/crates/tor-memtrack/src/config.rs
deleted file mode 100644
index ce8fd364c..000000000
--- a/crates/tor-memtrack/src/config.rs
+++ /dev/null
@@ -1,103 +0,0 @@
-//! Configuration (private module)
-
-use crate::internal_prelude::*;
-
-/// We want to support at least this many participants with a cache each
-///
-/// This is not a recommended value; it's probably too lax
-const MIN_MAX_PARTICIPANTS: usize = 10;
-
-/// Minimum hysteresis
-///
-/// This is not a recommended value; it's probably far too lax for sensible performance!
-const MAX_LOW_WATER_RATIO: f32 = 0.98;
-
-define_derive_deftly! {
- /// Define setters on the builder for every field of type `Qty`
- ///
- /// The field type must be spelled precisely that way:
- /// we use `approx_equal(...)`.
- QtySetters =
-
- impl $< $ttype Builder > {
- $(
- ${when approx_equal($ftype, Qty)}
-
- ${fattrs doc}
- ///
- /// (Setter method.)
- pub fn $fname(&mut self, value: usize) -> &mut Self {
- self.$fname = Some(Qty(value));
- self
- }
- )
- }
-}
-
-/// Configuration for a memory data tracker
-///
-/// This is where the quota is specified.
-#[derive(Debug, Clone, Builder, Eq, PartialEq, Deftly)]
-#[derive_deftly(QtySetters)]
-#[builder(build_fn(private, name = "build_unvalidated", error = "ConfigBuildError"))]
-#[builder(derive(Serialize, Deserialize, Debug, Deftly, Eq, PartialEq))]
-#[builder_struct_attr(derive_deftly(tor_config::Flattenable))]
-pub struct Config {
- /// Maximum memory usage tolerated before reclamation starts
- ///
- /// Note that this is not a hard limit.
- /// See Approximate in [the overview](crate).
- ///
- ///
- #[builder(setter(custom))]
- pub(crate) max: Qty,
-
- /// Reclamation will stop when memory use is reduced to below this value
- ///
- /// Default is 75% of the maximum.
- #[builder(setter(custom))]
- pub(crate) low_water: Qty,
-}
-
-impl Config {
- /// Start building a [`Config`]
- ///
- /// Returns a fresh default [`ConfigBuilder`].
- pub fn builder() -> ConfigBuilder {
- ConfigBuilder::default()
- }
-}
-
-impl ConfigBuilder {
- /// Builds a new `Config` from a builder
- ///
- /// Returns an error unless at least `max` has been specified,
- /// or if the fields values are invalid or inconsistent.
- pub fn build(&self) -> Result<Config, ConfigBuildError> {
- let mut builder = self.clone();
- if let (Some(max), None) = (builder.max, builder.low_water) {
- builder.low_water = Some(Qty((*max as f32 * 0.75) as _));
- }
- let config = builder.build_unvalidated()?;
-
- let min_low_water = crate::mtracker::MAX_CACHE.as_usize() * MIN_MAX_PARTICIPANTS;
- if *config.low_water < min_low_water {
- return Err(ConfigBuildError::Invalid {
- field: "low_water".into(),
- problem: format!("must be at least {min_low_water}"),
- });
- }
-
- let ratio: f32 = *config.low_water as f32 / *config.max as f32;
- if ratio > MAX_LOW_WATER_RATIO {
- return Err(ConfigBuildError::Inconsistent {
- fields: vec!["low_water".into(), "max".into()],
- problem: format!(
- "low_water / max = {ratio}; must be <= {MAX_LOW_WATER_RATIO}, ideally considerably lower"
- ),
- });
- }
-
- Ok(config)
- }
-}