From c5125b20bda2ca18eea91720f1de8850a3421896 Mon Sep 17 00:00:00 2001 From: weisd Date: Wed, 13 May 2026 14:19:43 +0800 Subject: [PATCH] fix(storage): keep storage info RPC map encoded (#2942) Co-authored-by: cxymds --- crates/ecstore/src/disk/local.rs | 2 +- rustfs/src/storage/rpc/health.rs | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/crates/ecstore/src/disk/local.rs b/crates/ecstore/src/disk/local.rs index 07c8b362f..34884e6c9 100644 --- a/crates/ecstore/src/disk/local.rs +++ b/crates/ecstore/src/disk/local.rs @@ -422,7 +422,7 @@ impl LocalDisk { total: info.total, free: info.free, used: info.used, - used_inodes: info.files - info.ffree, + used_inodes: info.files.saturating_sub(info.ffree), free_inodes: info.ffree, major: info.major, minor: info.minor, diff --git a/rustfs/src/storage/rpc/health.rs b/rustfs/src/storage/rpc/health.rs index 57eec92ff..4c7841c0c 100644 --- a/rustfs/src/storage/rpc/health.rs +++ b/rustfs/src/storage/rpc/health.rs @@ -236,3 +236,30 @@ impl NodeService { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn local_storage_info_rpc_payload_uses_msgpack_map_encoding() { + let info = rustfs_madmin::StorageInfo { + disks: Vec::new(), + backend: rustfs_madmin::BackendInfo { + backend_type: rustfs_madmin::BackendByte::Erasure, + standard_sc_data: vec![2, 2], + total_sets: vec![1, 1], + drives_per_set: vec![4, 4], + ..Default::default() + }, + }; + + let encoded = encode_msgpack_map(&info).expect("storage info should serialize"); + assert_eq!(encoded.first().copied(), Some(0x82)); + + let mut decoder = Deserializer::new(Cursor::new(encoded)); + let decoded: rustfs_madmin::StorageInfo = Deserialize::deserialize(&mut decoder).expect("storage info should decode"); + assert_eq!(decoded.backend.drives_per_set, vec![4, 4]); + assert_eq!(decoded.backend.total_sets, vec![1, 1]); + } +}