use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(default)]
#[serde(deny_unknown_fields)]
pub struct Config {
pub copy_parallelization: usize,
pub algorithm: AlgorithmConfig,
pub delete_requests: SpecificTimings,
pub put_requests: SpecificTimings,
}
impl Default for Config {
fn default() -> Self {
Self {
copy_parallelization: 20,
algorithm: Default::default(),
delete_requests: SpecificTimings {
seconds_per_unit: 0.2,
minimum_units_for_estimation: 10,
},
put_requests: SpecificTimings {
seconds_per_unit: 1.0 / 1_000_000.0, minimum_units_for_estimation: 10,
},
}
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct AlgorithmConfig {
pub base_timeout: f64,
pub timeout_fraction: f64,
pub backoff: f64,
pub n_retries: usize,
pub avg_power: f64,
}
impl Default for AlgorithmConfig {
fn default() -> Self {
Self {
base_timeout: 0.5,
timeout_fraction: 1.5,
backoff: 1.5,
n_retries: 8,
avg_power: 0.7,
}
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SpecificTimings {
pub seconds_per_unit: f64,
pub minimum_units_for_estimation: usize,
}
impl SpecificTimings {
pub fn default_for_bytes() -> Self {
Self {
seconds_per_unit: 1.0 / 1_000_000.0, minimum_units_for_estimation: 500_000, }
}
pub fn default_for_objects() -> Self {
Self {
seconds_per_unit: 0.2,
minimum_units_for_estimation: 2,
}
}
}