change fraction type

This commit is contained in:
Jonathan de Jong 2021-07-20 11:01:35 +02:00
parent ec44f3d568
commit d253f9236a
2 changed files with 6 additions and 6 deletions

View file

@ -126,7 +126,7 @@ fn default_sqlite_wal_clean_second_timeout() -> u32 {
} }
fn default_sqlite_spillover_reap_fraction() -> f64 { fn default_sqlite_spillover_reap_fraction() -> f64 {
2.0 0.5
} }
fn default_sqlite_spillover_reap_interval_secs() -> u32 { fn default_sqlite_spillover_reap_interval_secs() -> u32 {
@ -558,7 +558,7 @@ impl Database {
#[cfg(feature = "sqlite")] #[cfg(feature = "sqlite")]
pub async fn start_spillover_reap_task(engine: Arc<Engine>, config: &Config) { pub async fn start_spillover_reap_task(engine: Arc<Engine>, config: &Config) {
let fraction_factor = config.sqlite_spillover_reap_fraction.max(1.0); let fraction = config.sqlite_spillover_reap_fraction.clamp(0.01, 1.0);
let interval_secs = config.sqlite_spillover_reap_interval_secs as u64; let interval_secs = config.sqlite_spillover_reap_interval_secs as u64;
let weak = Arc::downgrade(&engine); let weak = Arc::downgrade(&engine);
@ -574,7 +574,7 @@ impl Database {
i.tick().await; i.tick().await;
if let Some(arc) = Weak::upgrade(&weak) { if let Some(arc) = Weak::upgrade(&weak) {
arc.reap_spillover_by_fraction(fraction_factor); arc.reap_spillover_by_fraction(fraction);
} else { } else {
break; break;
} }

View file

@ -244,14 +244,14 @@ impl Engine {
.map_err(Into::into) .map_err(Into::into)
} }
// Reaps (at most) (.len() / `fraction`) (rounded down, min 1) connections. // Reaps (at most) (.len() * `fraction`) (rounded down, min 1) connections.
pub fn reap_spillover_by_fraction(&self, fraction: f64) { pub fn reap_spillover_by_fraction(&self, fraction: f64) {
let mut reaped = 0; let mut reaped = 0;
let spill_amount = self.pool.spills.1.len() as f64; let spill_amount = self.pool.spills.1.len() as f64;
let fraction = fraction.max(1.0 /* Can never be too sure */); let fraction = fraction.clamp(0.01, 1.0);
let amount = (spill_amount / fraction).max(1.0) as u32; let amount = (spill_amount * fraction).max(1.0) as u32;
for _ in 0..amount { for _ in 0..amount {
if self.pool.spills.try_take().is_some() { if self.pool.spills.try_take().is_some() {