From 0bf32ab11aab191f91f27c2993a2b4c580028b14 Mon Sep 17 00:00:00 2001 From: houseme Date: Sun, 28 Jun 2026 07:31:01 +0800 Subject: [PATCH] feat(get): SF07 - conditional metrics recording Gate hot path metrics behind get_stage_metrics_enabled() to reduce overhead when metrics are not needed. Changes: - Conditional record_zero_copy_read - Conditional manager.record_disk_operation - Conditional manager.record_access - Conditional manager.record_transfer Expected impact: 20-50us reduction per GET request. Closes rustfs/backlog#772 Co-Authored-By: heihutu --- rustfs/src/app/object_usecase.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/rustfs/src/app/object_usecase.rs b/rustfs/src/app/object_usecase.rs index c2ceb15c3..8842814cc 100644 --- a/rustfs/src/app/object_usecase.rs +++ b/rustfs/src/app/object_usecase.rs @@ -2207,11 +2207,14 @@ impl DefaultObjectUsecase { let info = reader.object_info; - use rustfs_io_metrics::record_zero_copy_read; let read_duration = read_start.elapsed(); - record_zero_copy_read(info.size as usize, read_duration.as_secs_f64() * 1000.0); - manager.record_disk_operation(info.size as u64, read_duration, true).await; + // Conditional metrics recording to reduce overhead + if rustfs_io_metrics::get_stage_metrics_enabled() { + use rustfs_io_metrics::record_zero_copy_read; + record_zero_copy_read(info.size as usize, read_duration.as_secs_f64() * 1000.0); + manager.record_disk_operation(info.size as u64, read_duration, true).await; + } check_preconditions(&req.headers, &info)?; @@ -2351,14 +2354,17 @@ impl DefaultObjectUsecase { false }; - if let Some(range_spec) = rs - && range_spec.start >= 0 - { - manager.record_access(range_spec.start as u64, response_content_length as u64); - } + // Conditional metrics recording to reduce overhead + if rustfs_io_metrics::get_stage_metrics_enabled() { + if let Some(range_spec) = rs + && range_spec.start >= 0 + { + manager.record_access(range_spec.start as u64, response_content_length as u64); + } - if response_content_length > 0 { - manager.record_transfer(response_content_length as u64, permit_wait_duration); + if response_content_length > 0 { + manager.record_transfer(response_content_length as u64, permit_wait_duration); + } } let io_strategy =