use statvfs instead of mount list to determine free data/meta space (fix #611)

This commit is contained in:
Alex Auvolat
2023-09-11 19:08:24 +02:00
parent fc635f7072
commit d5bb50d738
4 changed files with 39 additions and 45 deletions
+1 -1
View File
@@ -24,7 +24,7 @@ hex = "0.4"
tracing = "0.1"
rand = "0.8"
sodiumoxide = { version = "0.2.5-0", package = "kuska-sodiumoxide" }
systemstat = "0.2.3"
nix = { version = "0.27", default-features = false, features = ["fs"] }
async-trait = "0.1.7"
serde = { version = "1.0", default-features = false, features = ["derive", "rc"] }
+8 -9
View File
@@ -891,15 +891,14 @@ impl NodeStatus {
}
fn update_disk_usage(&mut self, meta_dir: &Path, data_dir: &Path, metrics: &SystemMetrics) {
use systemstat::{Platform, System};
let mounts = System::new().mounts().unwrap_or_default();
let mount_avail = |path: &Path| {
mounts
.iter()
.filter(|x| path.starts_with(&x.fs_mounted_on))
.max_by_key(|x| x.fs_mounted_on.len())
.map(|x| (x.avail.as_u64(), x.total.as_u64()))
use nix::sys::statvfs::statvfs;
let mount_avail = |path: &Path| match statvfs(path) {
Ok(x) => {
let avail = x.blocks_available() * x.fragment_size();
let total = x.blocks() * x.fragment_size();
Some((avail, total))
}
Err(_) => None,
};
self.meta_disk_avail = mount_avail(meta_dir);