monitor: fix filecache calculations (#5112)

## Problem
An underflow bug in the filecache calculations.

## Summary of changes
Fixed the bug, cleaned up calculations in general.
This commit is contained in:
Felix Prasanna
2023-08-25 13:29:10 -04:00
committed by GitHub
parent 4436c84751
commit 40268dcd8d
2 changed files with 8 additions and 6 deletions

View File

@@ -634,7 +634,7 @@ impl CgroupWatcher {
.context("failed to get memory subsystem")?
.set_mem(cgroups_rs::memory::SetMemory {
low: None,
high: Some(MaxValue::Value(bytes.min(i64::MAX as u64) as i64)),
high: Some(MaxValue::Value(u64::min(bytes, i64::MAX as u64) as i64)),
min: None,
max: None,
})
@@ -654,8 +654,10 @@ impl CgroupWatcher {
.set_mem(cgroups_rs::memory::SetMemory {
min: None,
low: None,
high: Some(MaxValue::Value(limits.high.min(i64::MAX as u64) as i64)),
max: Some(MaxValue::Value(limits.max.min(i64::MAX as u64) as i64)),
high: Some(MaxValue::Value(
u64::min(limits.high, i64::MAX as u64) as i64
)),
max: Some(MaxValue::Value(u64::min(limits.max, i64::MAX as u64) as i64)),
})
.context("failed to set memory limits")
}

View File

@@ -132,11 +132,11 @@ impl FileCacheConfig {
// Conversions to ensure we don't overflow from floating-point ops
let size_from_spread =
0_i64.max((available as f64 / (1.0 + self.spread_factor)) as i64) as u64;
i64::max(0, (available as f64 / (1.0 + self.spread_factor)) as i64) as u64;
let size_from_normal = (total as f64 * self.resource_multiplier) as u64;
let byte_size = size_from_spread.min(size_from_normal);
let byte_size = u64::min(size_from_spread, size_from_normal);
// The file cache operates in units of mebibytes, so the sizes we produce should
// be rounded to a mebibyte. We round down to be conservative.
@@ -268,7 +268,7 @@ impl FileCacheState {
.context("failed to extract max file cache size from query result")?;
let max_mb = max_bytes / MiB;
let num_mb = (num_bytes / MiB).max(max_mb);
let num_mb = u64::min(num_bytes, max_bytes) / MiB;
let capped = if num_bytes > max_bytes {
" (capped by maximum size)"