fix(core): a file deleted after its failed create was written again leaves Drive (B191)

This commit is contained in:
nvrl committed 2026-10-05 04:50:02 +02:00
1 parent 1436c5f37e
commit 57a825887c
4 files changed
+71 -3

No files matched your search

+19
View File
@@ -12,6 +12,25 @@ Conventions:
---
## B191 — A file deleted after its create failed and was written again can stay on Drive
**Status:** Fixed (unverified).
**Found:** 2026-10-05, in the confirmation run on 1436c5f (`one_client_on_a_flaky_link` seed 11,
one replay in six). A create of `a.txt` got no answer, though Drive had made the file. The file
was written again, renamed twice and deleted. Drive kept `a.txt`, and nothing was queued.
**Where:** `drop_doomed_ops` in `crates/pdfs-core/src/db/ops.rs`.
**Cause.** A delete turns a create that was sent into a trash of what it may have made (B151).
Whether it was sent was read from its attempts and its claim. A write after the failure attaches
its bytes to the create and clears the attempts, so that the retry goes out at once
(`Db::attach_blob_to_create`). The delete then took the create for one never sent, and dropped
it whole.
**Fix.** A create with a target recorded (`sent_to`, B184) counts as sent as well. Test
`a_create_rewritten_after_it_failed_still_leaves_a_trash_when_deleted` in
`crates/pdfs-core/src/db/tests.rs`.
## B190 — A file saved just before the daemon stops can keep its old content on Drive
**Status:** Fixed (unverified).
+4 -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 B190.
- Fixes from the simulation and account runs since then: B125, B127, B130 and B141 to B191.
- **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.
@@ -116,7 +116,9 @@ Tracks `docs/MILESTONE-3.0.0.md`. Update it with every commit that moves a phase
The run on 2baad67 found that a restart before such a file's trash went out queued
its kept bytes again, for good (B188, fixed), and changes that sat out their retry
after an outage only the drain had met (B189, fixed; older than 3.0.0), and a file
saved just before a stop whose release the stop dropped (B190, fixed; older too).
saved just before a stop whose release the stop dropped (B190, fixed; older too). The run
on 1436c5f found a file deleted after its failed create was written again left on Drive
(B191, 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