mirror of https://github.com/telemt/telemt.git
ME Pool Reinit polishing
This commit is contained in:
parent
d8dcbbb61e
commit
fc2ac3d10f
|
|
@ -375,4 +375,68 @@ mod tests {
|
||||||
.unwrap_or(false));
|
.unwrap_or(false));
|
||||||
let _ = std::fs::remove_file(path);
|
let _ = std::fs::remove_file(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn update_every_overrides_legacy_fields() {
|
||||||
|
let toml = r#"
|
||||||
|
[general]
|
||||||
|
update_every = 123
|
||||||
|
proxy_secret_auto_reload_secs = 700
|
||||||
|
proxy_config_auto_reload_secs = 800
|
||||||
|
|
||||||
|
[censorship]
|
||||||
|
tls_domain = "example.com"
|
||||||
|
|
||||||
|
[access.users]
|
||||||
|
user = "00000000000000000000000000000000"
|
||||||
|
"#;
|
||||||
|
let dir = std::env::temp_dir();
|
||||||
|
let path = dir.join("telemt_update_every_override_test.toml");
|
||||||
|
std::fs::write(&path, toml).unwrap();
|
||||||
|
let cfg = ProxyConfig::load(&path).unwrap();
|
||||||
|
assert_eq!(cfg.general.effective_update_every_secs(), 123);
|
||||||
|
let _ = std::fs::remove_file(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn update_every_fallback_to_legacy_min() {
|
||||||
|
let toml = r#"
|
||||||
|
[general]
|
||||||
|
proxy_secret_auto_reload_secs = 600
|
||||||
|
proxy_config_auto_reload_secs = 120
|
||||||
|
|
||||||
|
[censorship]
|
||||||
|
tls_domain = "example.com"
|
||||||
|
|
||||||
|
[access.users]
|
||||||
|
user = "00000000000000000000000000000000"
|
||||||
|
"#;
|
||||||
|
let dir = std::env::temp_dir();
|
||||||
|
let path = dir.join("telemt_update_every_legacy_min_test.toml");
|
||||||
|
std::fs::write(&path, toml).unwrap();
|
||||||
|
let cfg = ProxyConfig::load(&path).unwrap();
|
||||||
|
assert_eq!(cfg.general.update_every, None);
|
||||||
|
assert_eq!(cfg.general.effective_update_every_secs(), 120);
|
||||||
|
let _ = std::fs::remove_file(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn update_every_zero_is_rejected() {
|
||||||
|
let toml = r#"
|
||||||
|
[general]
|
||||||
|
update_every = 0
|
||||||
|
|
||||||
|
[censorship]
|
||||||
|
tls_domain = "example.com"
|
||||||
|
|
||||||
|
[access.users]
|
||||||
|
user = "00000000000000000000000000000000"
|
||||||
|
"#;
|
||||||
|
let dir = std::env::temp_dir();
|
||||||
|
let path = dir.join("telemt_update_every_zero_test.toml");
|
||||||
|
std::fs::write(&path, toml).unwrap();
|
||||||
|
let err = ProxyConfig::load(&path).unwrap_err().to_string();
|
||||||
|
assert!(err.contains("general.update_every must be > 0"));
|
||||||
|
let _ = std::fs::remove_file(path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -342,6 +342,8 @@ impl Default for GeneralConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GeneralConfig {
|
impl GeneralConfig {
|
||||||
|
/// Resolve the active updater interval for ME infrastructure refresh tasks.
|
||||||
|
/// `update_every` has priority, otherwise legacy proxy_*_auto_reload_secs are used.
|
||||||
pub fn effective_update_every_secs(&self) -> u64 {
|
pub fn effective_update_every_secs(&self) -> u64 {
|
||||||
self.update_every
|
self.update_every
|
||||||
.unwrap_or_else(|| self.proxy_secret_auto_reload_secs.min(self.proxy_config_auto_reload_secs))
|
.unwrap_or_else(|| self.proxy_secret_auto_reload_secs.min(self.proxy_config_auto_reload_secs))
|
||||||
|
|
|
||||||
|
|
@ -240,6 +240,7 @@ impl MePool {
|
||||||
rng: &SecureRandom,
|
rng: &SecureRandom,
|
||||||
drain_timeout: Option<Duration>,
|
drain_timeout: Option<Duration>,
|
||||||
) {
|
) {
|
||||||
|
// Stage 1: prewarm writers for new endpoint maps before draining old ones.
|
||||||
self.reconcile_connections(rng).await;
|
self.reconcile_connections(rng).await;
|
||||||
|
|
||||||
let desired_by_dc = self.desired_dc_endpoints().await;
|
let desired_by_dc = self.desired_dc_endpoints().await;
|
||||||
|
|
@ -269,6 +270,7 @@ impl MePool {
|
||||||
missing_dc.sort_unstable();
|
missing_dc.sort_unstable();
|
||||||
warn!(
|
warn!(
|
||||||
missing_dc = ?missing_dc,
|
missing_dc = ?missing_dc,
|
||||||
|
// Keep stale writers alive when fresh coverage is incomplete.
|
||||||
"ME reinit coverage incomplete after map update; keeping stale writers"
|
"ME reinit coverage incomplete after map update; keeping stale writers"
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue