From cdfac5d7e3c4c6c1605e58bb80beb060483ab0fb Mon Sep 17 00:00:00 2001 From: cxymds Date: Fri, 21 Aug 2026 17:32:12 +0800 Subject: [PATCH] fix(ecstore): avoid decommission walk deadline on backpressure (#6332) fix(ecstore): bound decommission background walks --- crates/ecstore/src/core/pools.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/ecstore/src/core/pools.rs b/crates/ecstore/src/core/pools.rs index 1498d3ada..fb983dc0c 100644 --- a/crates/ecstore/src/core/pools.rs +++ b/crates/ecstore/src/core/pools.rs @@ -94,6 +94,9 @@ const DECOMMISSION_BUCKET_CONCURRENCY_DEFAULT_CAP: usize = 4; const DECOMMISSION_TARGET_CAPACITY_OVERHEAD_PERCENT: usize = 30; const DECOMMISSION_LISTING_MAX_ATTEMPTS: usize = 3; const DECOMMISSION_LISTING_RETRY_DELAY: std::time::Duration = std::time::Duration::from_secs(5); +/// Background decommission walks must tolerate slow object migrations; the +/// stall timeout is the drive-health bound, not the total listing duration. +const DECOMMISSION_BACKGROUND_WALKDIR_STALL_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(60); pub const POOL_META_NAME: &str = "pool.bin"; pub const POOL_META_FORMAT: u16 = 1; @@ -5047,6 +5050,8 @@ impl SetDisks { path: bucket_info.prefix.clone(), recursive: true, min_disks: listing_quorum, + skip_walkdir_total_timeout: true, + walkdir_stall_timeout: Some(DECOMMISSION_BACKGROUND_WALKDIR_STALL_TIMEOUT), agreed: Some(Box::new(move |entry: MetaCacheEntry| Box::pin(cb1(entry)))), partial: Some(Box::new(move |entries: MetaCacheEntries, _: &[Option]| { let resolver = resolver.clone();