fix capacity

Signed-off-by: junxiang Mu <1948535941@qq.com>
This commit is contained in:
junxiang Mu
2025-04-23 09:26:22 +00:00
parent 8981dfae9f
commit 380a451bc1
2 changed files with 12 additions and 3 deletions
+2 -2
View File
@@ -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; let mut capacity = 0;
for disk in disks.iter() { for disk in disks.iter() {
if disk.pool_index < 0 || info.backend.standard_sc_data.len() <= disk.pool_index as usize { 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 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; let mut capacity = 0;
for disk in disks.iter() { for disk in disks.iter() {
if disk.pool_index < 0 || info.backend.standard_sc_data.len() <= disk.pool_index as usize { if disk.pool_index < 0 || info.backend.standard_sc_data.len() <= disk.pool_index as usize {
+10 -1
View File
@@ -13,6 +13,8 @@ use ecstore::heal::heal_ops::new_heal_sequence;
use ecstore::metrics_realtime::{collect_local_metrics, CollectMetricsOpts, MetricType}; use ecstore::metrics_realtime::{collect_local_metrics, CollectMetricsOpts, MetricType};
use ecstore::new_object_layer_fn; use ecstore::new_object_layer_fn;
use ecstore::peer::is_reserved_or_invalid_bucket; 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::is_valid_object_prefix;
use ecstore::store_api::BucketOptions; use ecstore::store_api::BucketOptions;
use ecstore::store_api::StorageAPI; use ecstore::store_api::StorageAPI;
@@ -332,11 +334,18 @@ impl Operation for DataUsageInfoHandler {
return Err(S3Error::with_message(S3ErrorCode::InternalError, "Not init".to_string())); 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); error!("load_data_usage_from_backend failed {:?}", e);
s3_error!(InternalError, "load_data_usage_from_backend failed") 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) let data = serde_json::to_vec(&info)
.map_err(|_e| S3Error::with_message(S3ErrorCode::InternalError, "parse DataUsageInfo failed"))?; .map_err(|_e| S3Error::with_message(S3ErrorCode::InternalError, "parse DataUsageInfo failed"))?;