From 380a451bc1b2ef4b17a5b1590dcabfb807d5ce2c Mon Sep 17 00:00:00 2001 From: junxiang Mu <1948535941@qq.com> Date: Wed, 23 Apr 2025 09:26:22 +0000 Subject: [PATCH 1/2] fix capacity Signed-off-by: junxiang Mu <1948535941@qq.com> --- ecstore/src/pools.rs | 4 ++-- rustfs/src/admin/handlers.rs | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ecstore/src/pools.rs b/ecstore/src/pools.rs index e2249dcc..3e868f19 100644 --- a/ecstore/src/pools.rs +++ b/ecstore/src/pools.rs @@ -1284,7 +1284,7 @@ impl SetDisks { } } -fn get_total_usable_capacity(disks: &[madmin::Disk], info: &madmin::StorageInfo) -> usize { +pub fn get_total_usable_capacity(disks: &[madmin::Disk], info: &madmin::StorageInfo) -> usize { let mut capacity = 0; for disk in disks.iter() { if disk.pool_index < 0 || info.backend.standard_sc_data.len() <= disk.pool_index as usize { @@ -1297,7 +1297,7 @@ fn get_total_usable_capacity(disks: &[madmin::Disk], info: &madmin::StorageInfo) capacity } -fn get_total_usable_capacity_free(disks: &[madmin::Disk], info: &madmin::StorageInfo) -> usize { +pub fn get_total_usable_capacity_free(disks: &[madmin::Disk], info: &madmin::StorageInfo) -> usize { let mut capacity = 0; for disk in disks.iter() { if disk.pool_index < 0 || info.backend.standard_sc_data.len() <= disk.pool_index as usize { diff --git a/rustfs/src/admin/handlers.rs b/rustfs/src/admin/handlers.rs index 376c5743..569e2824 100644 --- a/rustfs/src/admin/handlers.rs +++ b/rustfs/src/admin/handlers.rs @@ -13,6 +13,8 @@ use ecstore::heal::heal_ops::new_heal_sequence; use ecstore::metrics_realtime::{collect_local_metrics, CollectMetricsOpts, MetricType}; use ecstore::new_object_layer_fn; use ecstore::peer::is_reserved_or_invalid_bucket; +use ecstore::pools::get_total_usable_capacity; +use ecstore::pools::get_total_usable_capacity_free; use ecstore::store::is_valid_object_prefix; use ecstore::store_api::BucketOptions; use ecstore::store_api::StorageAPI; @@ -332,11 +334,18 @@ impl Operation for DataUsageInfoHandler { return Err(S3Error::with_message(S3ErrorCode::InternalError, "Not init".to_string())); }; - let info = load_data_usage_from_backend(store).await.map_err(|e| { + let mut info = load_data_usage_from_backend(store.clone()).await.map_err(|e| { error!("load_data_usage_from_backend failed {:?}", e); s3_error!(InternalError, "load_data_usage_from_backend failed") })?; + let sinfo = store.storage_info().await; + info.total_capacity = get_total_usable_capacity(&sinfo.disks, &sinfo) as u64; + info.total_free_capacity = get_total_usable_capacity_free(&sinfo.disks, &sinfo) as u64; + if info.total_capacity > info.total_free_capacity { + info.total_used_capacity = info.total_capacity - info.total_free_capacity; + } + let data = serde_json::to_vec(&info) .map_err(|_e| S3Error::with_message(S3ErrorCode::InternalError, "parse DataUsageInfo failed"))?; From 45a9b6313e19bbab8fe67966e56f37d449df3adc Mon Sep 17 00:00:00 2001 From: junxiang Mu <1948535941@qq.com> Date: Wed, 23 Apr 2025 09:29:37 +0000 Subject: [PATCH 2/2] fmt Signed-off-by: junxiang Mu <1948535941@qq.com> --- rustfs/src/admin/handlers.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rustfs/src/admin/handlers.rs b/rustfs/src/admin/handlers.rs index 569e2824..dfeeeb87 100644 --- a/rustfs/src/admin/handlers.rs +++ b/rustfs/src/admin/handlers.rs @@ -13,8 +13,7 @@ use ecstore::heal::heal_ops::new_heal_sequence; use ecstore::metrics_realtime::{collect_local_metrics, CollectMetricsOpts, MetricType}; use ecstore::new_object_layer_fn; use ecstore::peer::is_reserved_or_invalid_bucket; -use ecstore::pools::get_total_usable_capacity; -use ecstore::pools::get_total_usable_capacity_free; +use ecstore::pools::{get_total_usable_capacity, get_total_usable_capacity_free}; use ecstore::store::is_valid_object_prefix; use ecstore::store_api::BucketOptions; use ecstore::store_api::StorageAPI;