bug
reclaim` calls `app.sweeper.sweep(dry_run)` directly instead of the async `Sweeper::run` (sweep.rs:82-85), so it never takes the `running` mutex that sweep.rs's own module doc (sweep.rs:11-13) says… reclaim` calls `app.sweeper.sweep(dry_run)` directly instead of the async `Sweeper::run` (sweep.rs:82-85), so it never takes the `running` mutex that sweep.rs's own module doc (sweep.rs:11-13) says is required: "Two of them over one directory would each decide what to remove from a total the other is already changing... they would take the store far below the ceiling either was aiming at." A `POST /v1/admin/cache/sweep` that lands while the periodic sweep (main.rs:116, which does use `run()`) is in flight, or two concurrent admin requests, run two unsynchronized sweeps over the same directory concurrently, defeating the exact invariant the code is built around.
services/proxy/src/routes/admin.rs:76
Evidence quote
Not recorded
Suggested fix
Not recorded