Changes touching this path
- a_scanner_holding_the_staging_file_does_not_fail_a_save waits for its scanner to finish a first scan before it starts the save, instead of starting it the moment the scanner thread is spawned: under 48 cpu-burn and 16 file-churn threads on 24 logical CPUs, measured at 100 percent, an instrumented run showed the scanner had scanned zero times in 48 of 48 rounds, its first instruction 113 to 518 ms after the spawn while the whole save took 2 to 8 ms, so every round missed the same way and the round count was never what failed. the wait is the condition, bounded by the scanner reaching its first scan whatever that scan returned, so a scanner that cannot read the directory still fails at the guard rather than hanging; the 8 rounds stay, now covering only the race a polling scanner has by construction, and 42 of 64 rounds caught the file under the same load. no reason for 8 was recorded when #2026 chose it, and it is not raised. interleaved under that load the old test passed 1 of 10 runs alone (9 failed at its guard) and the fixed one 10 of 10; the loot-core suite failed at the guard under load with the old test (689 passed and 1 failed) and passed 3 of 3 with the fix (690 passed each). the guard and the property stay live, counts read each time, each restored green: the scanner looking for a suffix nothing has (0 passed and 1 failed at the guard), the scanner reading a directory that is absent (0 and 1 at the guard, no hang), and a bare rename in save_objects_loose (0 and 1, os error 32 out of the save). not an instance of the #2258 naming shape: its fixtures come from testkit::tmp and its staging names from stage_tmp_name, both pid plus a per-process counter. test-only; no migration, format byte or wire byte moves, so this owes no deploy. the workspace suite is green (4431 passed over 139 binaries, 13 ignored) (#2269)
8f1a341f · dbf3dbe6…
Renames are not followed. loot's tree maps a path to an address, so a rename is a delete and an add. This list is the history of the name, not of the bytes.