mirror of
https://github.com/rustfs/rustfs.git
synced 2026-07-26 16:28:15 +00:00
72d76dc9ca
Two dirty-mark lifecycle gaps (S19+S30): - A commit cleared every dirty mark for the disks it scanned, even marks recorded while the walker was already past the written prefix, so the next dirty-subset refresh served stale cached bytes as exact until the next full scan. Dirty marks now carry the instant they were last recorded and a commit only clears marks that predate its scan start (CapacityUpdate::scan_started_at, set by refresh_capacity_with_scope). - The write side marks every disk of an EC set dirty, including remote peers, while scans and clearing only cover local disks — remote or removed disks stayed marked forever, keeping the dirty-disk gauge permanently non-zero with bounded memory stuck behind it. The refresh disk selection now prunes dirty entries outside the current local topology before consulting them. Ref: rustfs/backlog#1020 (S19+S30 from audit rustfs/backlog#1010)