Skip to content

Flake (macOS once, ubuntu once): retention_loop's steady-state pass captured no INFO line on main (a_pass_with_nothing_to_evict_is_audible_and_not_an_alarm) — the scoped capture, not the loop #542

Description

@emooreatx

Seen once, on main's clippy + test (macos-latest) for 26ad854 (run 33939138651):

thread 'a_pass_with_nothing_to_evict_is_audible_and_not_an_alarm' panicked at tests/retention_loop.rs:303:5:
the pass emitted no INFO line, so a node whose retention loop has DIED looks exactly like one whose store is healthy. Silence is not a report.
test result: FAILED. 9 passed; 1 failed

The same test passed on the macOS lanes of e2f9557 (run 33931911725) and of #540 (run 33939306963, main + a one-line unit-test change). Never seen on ubuntu. The outcome assertions before it passed (WithinBounds, not a fault, no alarms) — only the "at least one INFO event was captured" half failed.

What the capture can and cannot see. tests/support/log_capture::capture runs the future under fut.with_subscriber(registry().with(CaptureLayer)). That scopes the subscriber to the instrumented future's own polls; an event emitted from a spawned task or a blocking thread (sqlx's pool workers, spawn_blocking) is invisible to it. run_pass emits its steady-state INFO inline after storage_summary() and evict_per_retention_policy(), so the expected line should be inside the scope — which is why this reads as a flake and not a deterministic miss. Worth checking on macOS specifically whether the INFO in the Within arm is reached on the path a fresh 3-trace store takes, or whether the pass returns through a branch that logs at DEBUG.

Ask: either make the capture thread-robust (tracing::subscriber::set_default guard for the duration, which also covers tasks spawned onto the current-thread test runtime) or make the assertion name the specific INFO it expects instead of "any INFO", so a miss says which line went quiet. Until then, a red macOS lane on main with only this test failing is this issue, not a regression — but it should not be allowed to become a permanent exemption.

Context: found while clearing main's lanes after the 0.5.197 merge (#529, #538, #539, #540).

🤖 Generated with Claude Code

https://claude.ai/code/session_01QVZ3v83uX8noLxXr7d7pu9

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:ci-buildWorkflows, caching, wheels, packaging

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions