fix(ratecontroller): account for configured and partial reflector sets

Cap the required delta count at the active peer count using advanced_settings.num_reflectors. Keep requesting reselection when the active set is empty so recovery remains possible.
This commit is contained in:
Nils Andreas Svee committed 2026-10-14 11:58:07 +07:00
1 parent 2e24da4bf8
commit 5624746914
1 file changed
+9 -3
+9 -3
View File
@@ -491,12 +491,18 @@ impl<S: InterfaceStatsProvider, T: TrafficControlBackend> Ratecontroller<S, T> {
self.state_dl.deltas = down_deltas; self.state_dl.deltas = down_deltas;
self.state_ul.deltas = up_deltas; self.state_ul.deltas = up_deltas;
if self.state_dl.deltas.len() < 5 || self.state_ul.deltas.len() < 5 { let minimum =
usize::from(self.settings.advanced_settings.num_reflectors).min(reflectors.len());
if reflectors.is_empty()
|| self.state_dl.deltas.len() < minimum
|| self.state_ul.deltas.len() < minimum
{
// trigger reselection // trigger reselection
warn!( warn!(
"Not enough delta values (D: {}, U: {}, need 5), triggering reselection", "Not enough delta values (D: {}, U: {}, need {}), triggering reselection",
self.state_dl.deltas.len(), self.state_dl.deltas.len(),
self.state_ul.deltas.len() self.state_ul.deltas.len(),
minimum
); );
let _ = self.reselect_trigger.try_send(true); let _ = self.reselect_trigger.try_send(true);
} }