From 0269c47bc6dffbd607baf1fa4dee0739ed40a5af Mon Sep 17 00:00:00 2001 From: houseme Date: Fri, 24 Jul 2026 09:27:49 +0800 Subject: [PATCH] fix(runtime): update codec and debug stack headroom (#5164) * fix(runtime): raise debug worker stack headroom Co-Authored-By: heihutu * chore(deps): update codec to 8.0.2 Co-Authored-By: heihutu --------- Co-authored-by: heihutu --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- rustfs/src/server/runtime.rs | 28 +++++++++++++++++++++++++--- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ba88bbbc2..6a7966d7a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9200,9 +9200,9 @@ dependencies = [ [[package]] name = "rustfs-erasure-codec" -version = "8.0.1" +version = "8.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a39413e8f0ca32be9bc2ca9d29f8d17a2ddf952748284cf0fd148ab11180cf6c" +checksum = "bb8ba5edcc507013a0a7bcf7424be94f0ef070b38eab8bcbc38206a8148bc70a" dependencies = [ "cc", "cfg_aliases", diff --git a/Cargo.toml b/Cargo.toml index c00c1eda0..2f62413af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -278,7 +278,7 @@ pretty_assertions = "1.4.1" rand = { version = "0.10.2" } ratelimit = "0.10.1" rayon = "1.12.0" -reed-solomon-erasure = { package = "rustfs-erasure-codec", version = "8.0.1" } +reed-solomon-erasure = { package = "rustfs-erasure-codec", version = "8.0.2" } reed-solomon-simd = "3.1.0" regex = { version = "1.13.1" } rumqttc = { package = "rumqttc-next", version = "0.33.3" } diff --git a/rustfs/src/server/runtime.rs b/rustfs/src/server/runtime.rs index 1619d194f..8d7f95ba7 100644 --- a/rustfs/src/server/runtime.rs +++ b/rustfs/src/server/runtime.rs @@ -19,15 +19,37 @@ use rustfs_obs::dial9::Dial9SessionGuard; #[inline] fn compute_default_thread_stack_size() -> usize { - // Baseline: Release 1 MiB,Debug 2 MiB;macOS at least 2 MiB - // macOS is more conservative: many system libraries and backtracking are more "stack-eating" - if cfg!(debug_assertions) || cfg!(target_os = "macos") { + if cfg!(debug_assertions) { + // Debug builds keep larger async futures and tracing state on the stack; + // scanner e2e paths need more headroom than the release runtime. + 8 * rustfs_config::DEFAULT_THREAD_STACK_SIZE + } else if cfg!(target_os = "macos") { + // macOS is more conservative: many system libraries and backtracking are more "stack-eating" 2 * rustfs_config::DEFAULT_THREAD_STACK_SIZE } else { rustfs_config::DEFAULT_THREAD_STACK_SIZE } } +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn default_thread_stack_size_matches_build_profile() { + let default_stack = rustfs_config::DEFAULT_THREAD_STACK_SIZE; + let expected = if cfg!(debug_assertions) { + 8 * default_stack + } else if cfg!(target_os = "macos") { + 2 * default_stack + } else { + default_stack + }; + + assert_eq!(compute_default_thread_stack_size(), expected); + } +} + #[inline] fn detect_cores() -> usize { // Priority physical cores, fallback logic cores, minimum 1