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_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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user