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:
1 file changed
+9
-3
@@ -491,12 +491,18 @@ impl<S: InterfaceStatsProvider, T: TrafficControlBackend> Ratecontroller<S, T> {
|
||||
self.state_dl.deltas = down_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
|
||||
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_ul.deltas.len()
|
||||
self.state_ul.deltas.len(),
|
||||
minimum
|
||||
);
|
||||
let _ = self.reselect_trigger.try_send(true);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user