From 727a10e111dce32dea610242a4a259d0a0ffcae3 Mon Sep 17 00:00:00 2001 From: Henry Guo Date: Tue, 11 Aug 2026 09:01:51 +0800 Subject: [PATCH] fix(scanner): skip disk inventory in scan spans (#5933) Co-authored-by: Henry Guo --- crates/scanner/src/scanner_io.rs | 2 +- scripts/check_logging_guardrails.sh | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/crates/scanner/src/scanner_io.rs b/crates/scanner/src/scanner_io.rs index efb3b5e1c..78987fa13 100644 --- a/crates/scanner/src/scanner_io.rs +++ b/crates/scanner/src/scanner_io.rs @@ -3881,7 +3881,7 @@ impl ScannerIODisk for Disk { Ok(size_summary) } - #[tracing::instrument(skip(self, budget, updates, cache))] + #[tracing::instrument(skip(self, budget, updates, cache, set_disks))] async fn nsscanner_disk( self: Arc, ctx: CancellationToken, diff --git a/scripts/check_logging_guardrails.sh b/scripts/check_logging_guardrails.sh index d1bb4da6e..d109262c4 100755 --- a/scripts/check_logging_guardrails.sh +++ b/scripts/check_logging_guardrails.sh @@ -842,6 +842,34 @@ for file in "${disk_logging_files[@]}"; do fi done +# `set_disks` expands every Disk through Debug, including raw format bytes and +# the full per-operation metrics ring. Keep it out of the INFO scanner span. +scanner_disk_skip_pattern='#\[(tracing::)?instrument\([^]]*skip\([^)]*\bset_disks\b[^)]*\)[^]]*\)\][[:space:]]*async fn nsscanner_disk\b' +if ! rg -U "$scanner_disk_skip_pattern" crates/scanner/src/scanner_io.rs >/dev/null; then + echo "❌ logging guardrail violation: nsscanner_disk must skip set_disks in its tracing instrumentation" >&2 + exit 1 +fi + +for fixture in \ + $'#[tracing::instrument(skip(self, budget, updates, cache, set_disks))]\nasync fn nsscanner_disk('; do + if ! printf '%s\n' "$fixture" | rg -U "$scanner_disk_skip_pattern" >/dev/null; then + echo "❌ logging guardrail self-test failed: safe nsscanner_disk span was rejected" >&2 + echo "$fixture" >&2 + exit 1 + fi +done + +for fixture in \ + $'#[tracing::instrument(skip(self, budget, updates, cache))]\nasync fn nsscanner_disk(' \ + $'#[tracing::instrument(skip(self, budget, updates, cache), fields(set_disks = set_disks.len()))]\nasync fn nsscanner_disk(' \ + $'#[tracing::instrument(skip(self, budget, updates, cache, set_disks_count))]\nasync fn nsscanner_disk('; do + if printf '%s\n' "$fixture" | rg -U "$scanner_disk_skip_pattern" >/dev/null; then + echo "❌ logging guardrail self-test failed: unsafe nsscanner_disk span was accepted" >&2 + echo "$fixture" >&2 + exit 1 + fi +done + # `forbidden_patterns` above only retires log lines that already shipped, so a # newly written sentence-style log passes every check in this script — which is # how one reaches review in the first place (PR #5822 added