From cd891433c92f7f10c6f0c78fe58f56f51696f295 Mon Sep 17 00:00:00 2001 From: overtrue Date: Tue, 1 Sep 2026 01:31:59 +0800 Subject: [PATCH] fix(ecstore): use capacity info override for decommission race test The assert_real_activation_start_race test used set_decommission_space_info_override_for_test which creates capacity infos via from_logical with take semantics (consumed on first access). After the decommission capacity reservation model was introduced in PR #6917, the capacity check reads actual physical disk space when the override has already been consumed, causing the test to fail with real disk values (~11TB required vs ~2TB available on a local Mac). Switch to set_decommission_capacity_info_overrides_for_test which uses a VecDeque (supports multiple snapshots for repeated access) and provides properly formed DecommissionPoolCapacityInfo values with matching erasure layout. --- .../ecstore/src/services/rebalance/control.rs | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/crates/ecstore/src/services/rebalance/control.rs b/crates/ecstore/src/services/rebalance/control.rs index b351ebbdb..cd7426ca0 100644 --- a/crates/ecstore/src/services/rebalance/control.rs +++ b/crates/ecstore/src/services/rebalance/control.rs @@ -1329,8 +1329,9 @@ mod tests { use super::*; use crate::config::com::delete_config; use crate::core::pools::{ - POOL_META_NAME, PoolActivationDurableSaveBarrier, PoolActivationStartKind, PoolActivationStartProbe, PoolMetaWriteState, - persist_pool_meta_identity_for_startup, + DecommissionErasureLayout, DecommissionPoolCapacityInfo, POOL_META_NAME, PoolActivationDurableSaveBarrier, + PoolActivationStartKind, PoolActivationStartProbe, PoolMetaWriteState, persist_pool_meta_identity_for_startup, + set_decommission_capacity_info_overrides_for_test, }; use crate::object_api::NamespaceLockFence; use crate::set_disk::{PutObjectCommitBarrier, PutObjectCommitPause, hermetic_set_disks_isolated}; @@ -1751,25 +1752,18 @@ mod tests { ]; set_rebalance_disk_stats_override_for_test(rebalance_store.id, disk_stats.clone()); set_rebalance_disk_stats_override_for_test(decommission_store.id, disk_stats); - crate::core::pools::set_decommission_space_info_override_for_test( + let capacity_layout = DecommissionErasureLayout { data: 4, parity: 4 }; + set_decommission_capacity_info_overrides_for_test( decommission_store.id, vec![ - ( - 0, - crate::core::pools::PoolSpaceInfo { - free: 0, - total: 100, - used: 100, - }, - ), - ( - 1, - crate::core::pools::PoolSpaceInfo { - free: 200, - total: 200, - used: 0, - }, - ), + vec![ + DecommissionPoolCapacityInfo::for_test(0, capacity_layout, 0, 100, 100), + DecommissionPoolCapacityInfo::for_test(1, capacity_layout, 200, 200, 0), + ], + vec![ + DecommissionPoolCapacityInfo::for_test(0, capacity_layout, 0, 100, 100), + DecommissionPoolCapacityInfo::for_test(1, capacity_layout, 200, 200, 0), + ], ], ); let (first_object, competing_object, competing_kind) = match paused_kind {