3 Commits
Author SHA1 Message Date
Nils Andreas Svee c6fc3a7fc9 fix(reflectors): retain responsive peers on partial reselection
Build binaries / Build (arm-musleabi) (push) Successful in 1m50s
Build binaries / Build (aarch64-musl) (push) Successful in 1m51s
Build binaries / Build (arm-musleabihf) (push) Successful in 1m53s
Build binaries / Build (armv7-musleabi) (push) Successful in 1m54s
Build binaries / Build (armv7-musleabihf) (push) Successful in 1m55s
Build binaries / Build (i686-musl) (push) Successful in 1m54s
Build binaries / Build (mips-musl) (push) Successful in 2m9s
Build binaries / Build (mips64-muslabi64) (push) Successful in 2m8s
Build binaries / Build (mips64el-muslabi64) (push) Successful in 2m6s
Build binaries / Build (mipsel-musl) (push) Successful in 2m5s
Build binaries / Build (x86_64-musl) (push) Successful in 1m52s
Build binaries / Build (riscv64gc-musl) (push) Successful in 1m52s
2026-10-14 01:23:51 +07:00
Nils Andreas Svee 51f0ae2e23 fix(config): reject reflector entries without protocols 2026-10-14 01:23:28 +07:00
Nils Andreas Svee 54d162f494 fix(config): parse reflector list environment overrides 2026-10-14 01:23:15 +07:00
3 changed files with 27 additions and 7 deletions

No files matched your search

+10 -6
View File
@@ -252,17 +252,21 @@ impl ReflectorSelector {
candidates.swap(i, j);
}
if (candidates.len() as u8) < num_reflectors {
info!(
"Only {} usable reflectors, retaining current set of {}",
candidates.len(),
num_reflectors
);
if candidates.is_empty() {
info!("No usable reflectors, retaining current set");
self.reflector_tx.send(current_peers.clone())?;
*reflectors_peers = current_peers;
continue;
}
if (candidates.len() as u8) < num_reflectors {
info!(
"Only {} usable reflectors, selecting available candidates",
candidates.len()
);
}
let num_reflectors = num_reflectors.min(candidates.len() as u8);
let mut new_peers = Vec::new();
for i in 0..num_reflectors {
let peer = candidates[i as usize].0;
+8 -1
View File
@@ -200,7 +200,14 @@ impl Settings {
config::File::with_name("/etc/sqm-autorate-rust/config.toml").required(false),
);
let builder = builder.add_source(Environment::with_prefix("SQMA").separator("__"));
let builder = builder.add_source(
Environment::with_prefix("SQMA")
.separator("__")
.try_parsing(true)
.list_separator(",")
.with_list_parse_key("reflectors.files")
.with_list_parse_key("reflectors.countries"),
);
let mut settings: Self = builder.build()?.try_deserialize()?;
settings.reflectors.load_files()?;
+9
View File
@@ -212,6 +212,15 @@ impl ReflectorSettings {
);
}
for (index, reflector) in self.entries.iter().enumerate() {
if reflector.protocols.is_empty() {
report.error(
"reflectors.entries",
format!("entry {index} must have at least one measurement protocol"),
);
}
}
for (index, file) in self.files.iter().enumerate() {
if file.trim().is_empty() {
report.error(