From 7a37271bc07a621d9cde8331dcc95abcfb376040 Mon Sep 17 00:00:00 2001 From: Chris Date: Tue, 15 Sep 2026 03:11:22 +0800 Subject: [PATCH] fix: keep top locks within its capture window (#7888) --- rustfs/src/connect/diagnostics/top_locks.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rustfs/src/connect/diagnostics/top_locks.rs b/rustfs/src/connect/diagnostics/top_locks.rs index de3ef96eb..970d58b25 100644 --- a/rustfs/src/connect/diagnostics/top_locks.rs +++ b/rustfs/src/connect/diagnostics/top_locks.rs @@ -47,12 +47,14 @@ pub async fn capture_top_locks( let Some(_permit) = request.acquire(cancel).await? else { return request.cancelled(TOOL_ID); }; - let started = tokio::time::Instant::now(); if !request.wait_window(TOOL_ID, cancel).await? { return request.cancelled(TOOL_ID); } let (held_count, waiting_count) = manager.current_lock_counts(); - let duration_millis = u64::try_from(started.elapsed().as_millis()).unwrap_or(u64::MAX).max(1); + // Report the admitted capture window. Scheduler wake-up jitter is not part + // of the measurement and must not turn an exactly bounded job into a + // LIMIT_EXCEEDED result. + let duration_millis = u64::try_from(request.window.as_millis()).unwrap_or(u64::MAX).max(1); evaluate_lock_snapshot(request, held_count, waiting_count, duration_millis) }