refactor(ratectrl): Enhance stability and file handling

This commit is contained in:
Nils Andreas Svee committed 2026-02-22 17:05:01 +07:00
1 parent c45351042e
commit a4a83222fe
1 file changed
+9 -5
+9 -5
View File
@@ -188,7 +188,7 @@ impl Ratecontroller {
Ok(()) Ok(())
} }
fn update_deltas(&mut self) { fn update_deltas(&mut self) -> anyhow::Result<()> {
let state_dl = &mut self.state_dl; let state_dl = &mut self.state_dl;
let state_ul = &mut self.state_ul; let state_ul = &mut self.state_ul;
@@ -226,14 +226,16 @@ impl Ratecontroller {
} }
// sort owd's lowest to highest // sort owd's lowest to highest
state_dl.deltas.sort_by(|a, b| a.partial_cmp(b).unwrap()); state_dl.deltas.sort_by(|a, b| a.total_cmp(b));
state_ul.deltas.sort_by(|a, b| a.partial_cmp(b).unwrap()); state_ul.deltas.sort_by(|a, b| a.total_cmp(b));
if state_dl.deltas.len() < 5 || state_ul.deltas.len() < 5 { if state_dl.deltas.len() < 5 || state_ul.deltas.len() < 5 {
// trigger reselection // trigger reselection
warn!("Not enough delta values, triggering reselection"); warn!("Not enough delta values, triggering reselection");
let _ = self.reselect_trigger.send(true); let _ = self.reselect_trigger.send(true);
} }
Ok(())
} }
pub fn new( pub fn new(
@@ -295,6 +297,7 @@ impl Ratecontroller {
speed_hist_fd_inner = File::options() speed_hist_fd_inner = File::options()
.create(true) .create(true)
.write(true) .write(true)
.truncate(true)
.open(self.config.speed_hist_file.as_str())?; .open(self.config.speed_hist_file.as_str())?;
speed_hist_fd_inner.write_all("time,counter,upspeed,downspeed\n".as_bytes())?; speed_hist_fd_inner.write_all("time,counter,upspeed,downspeed\n".as_bytes())?;
@@ -305,6 +308,7 @@ impl Ratecontroller {
stats_fd_inner = File::options() stats_fd_inner = File::options()
.create(true) .create(true)
.write(true) .write(true)
.truncate(true)
.open(self.config.stats_file.as_str())?; .open(self.config.stats_file.as_str())?;
stats_fd_inner.write_all( stats_fd_inner.write_all(
@@ -332,7 +336,7 @@ impl Ratecontroller {
continue; continue;
} }
self.update_deltas(); self.update_deltas()?;
if self.state_dl.deltas.is_empty() || self.state_ul.deltas.is_empty() { if self.state_dl.deltas.is_empty() || self.state_ul.deltas.is_empty() {
warn!("No reflector data available, dropping to minimum rates"); warn!("No reflector data available, dropping to minimum rates");
@@ -390,7 +394,7 @@ impl Ratecontroller {
); );
if let Some(ref mut fd) = stats_fd { if let Some(ref mut fd) = stats_fd {
if let Err(e) = fd.write( if let Err(e) = fd.write_all(
format!( format!(
"{},{},{},{},{},{},{},{}\n", "{},{},{},{},{},{},{},{}\n",
stats_time.secs(), stats_time.secs(),