fix(fuse,core): retry a create at once when a write replaced its blob (B185)

This commit is contained in:
nvrl committed 2026-10-05 02:34:05 +02:00
1 parent 93f02672e6
commit d26dc8ada4
6 files changed
+80 -11

No files matched your search

+19
View File
@@ -12,6 +12,25 @@ Conventions:
---
## B185 — A new file written again just as it starts uploading waits out a retry
**Status:** Fixed (unverified).
**Found:** 2026-10-05, in the confirmation run on 3073052 (`one_client_on_a_good_link` seed 6,
then `one_client_deleting_files_as_they_upload` seed 4). The queues did not drain in time: a
create had failed with "No such file or directory" and was backing off.
**Where:** `Db::retry_if_retargeted` in `crates/pdfs-core/src/db/ops.rs`, called from the drain
in `crates/pdfs-fuse/src/drain.rs`.
**Cause.** A write to a file whose create is queued attaches a new blob to the create and
discards the old one at once. An attempt that had claimed the create but not yet opened the old
blob failed on a file that was gone, and backed off as if Drive had refused it. The new blob was
ready, but the create waited out the backoff.
**Fix.** A failed create whose blob was replaced while it ran is due again at once, the way one
renamed while it ran already was. Test `renaming_a_backing_off_create_makes_it_due` in
`crates/pdfs-core/src/db/tests.rs`.
## B184 — A file renamed after its create lost its answer stays on Drive under its old name
**Status:** Fixed (unverified).
+2
View File
@@ -105,6 +105,8 @@ by its local id, in the queue, the stored tree and pins alike.
- **A file renamed while the connection lost Drive's answer to its upload lands once.** It no
longer stayed on Drive under its old name too, or, when deleted, under its old name alone
(B184).
- **A new file written again just as it starts uploading no longer waits out a retry** before
it reaches Drive (B185).
- **A file renamed just as its upload finished keeps its new name.** The mount no longer showed
the old name, and a second rename no longer failed with "No such file or directory" (B152,
B172).
+3 -2
View File
@@ -9,7 +9,7 @@ Tracks `docs/MILESTONE-3.0.0.md`. Update it with every commit that moves a phase
- **Phase 2**: local ids, inode = local id, one tree for every mount (2.10.0).
- **Phase 3, first part**: mkdir, create, rename, unlink and rmdir on the mount are recorded
locally and sent from the queue; `"local_first": false` brings back the old path (5e0f30c).
- Fixes from the simulation and account runs since then: B125, B127, B130 and B141 to B184.
- Fixes from the simulation and account runs since then: B125, B127, B130 and B141 to B185.
- **Sync issues, first cut** (§6.2): refusals sorted into issues, shown at once in the app,
tray and CLI; Export button and `pdfs sync export`; `pdfs sync issues`; Discard button and
`pdfs sync discard`; a warning badge on the node in the file browser.
@@ -110,7 +110,8 @@ Tracks `docs/MILESTONE-3.0.0.md`. Update it with every commit that moves a phase
after restarts: a write over a create never read back (B182) and a trash that forgot
what its create sent (B183). Replays with those fixed found a third: a create renamed
after it lost its answer (B184). All three fixed; no known-bug matcher fired. It was
stopped before `three_clients`.
stopped before `three_clients`. The rerun on 3073052 found a create that waited out
a retry after a write replaced its blob (B185, fixed).
- [ ] A clean account run. The one on a6f36d5 (2026-10-04, LAN: 427 passed, 12 failed)
failed B113 and B121 on every on-demand mount, two mirror-to-mirror move cases, and
the journal check. B121 was a bug (B149, fixed); B113's case still expected creates