mirror of
https://github.com/narrrl/proton-drive-linux.git
synced 2026-11-04 16:56:59 +01:00
fix(fuse): keep what an open file reads when its delete is queued (B186)
This commit is contained in:
1 parent
d26dc8ada4
commit
c271a1897c
6 files changed
+109
-5
No files matched your search
@@ -12,6 +12,25 @@ Conventions:
|
||||
|
||||
---
|
||||
|
||||
## B186 — A file deleted offline while open fails a partial write with "Input/output error"
|
||||
|
||||
**Status:** Fixed (unverified).
|
||||
**Found:** 2026-10-05, in the confirmation run on 3073052 (`three_clients_one_writer_each`
|
||||
seed 4; it fails on da013c2 too). With its link down, a client opened a file it had uploaded,
|
||||
deleted it, and appended to it. The append took 30 s and failed with `EIO`.
|
||||
|
||||
**Where:** `Core::queue_trash` in `crates/pdfs-fuse/src/lib.rs` and `Core::drain_trash` in
|
||||
`crates/pdfs-fuse/src/drain.rs`.
|
||||
|
||||
**Cause.** A delete sent to Drive at once keeps what an open handle reads, its queued and cached
|
||||
bytes, until the final close (B106). A delete queued, as local-first and offline do, dropped
|
||||
them at once. A partial write fills its gaps from those bytes, so it had to download the file,
|
||||
and offline it could not.
|
||||
|
||||
**Fix.** A queued delete of an open file keeps them as well. The final close lets go of them
|
||||
once the delete has landed, and the delete landing lets go of them once the file is closed.
|
||||
Sim test `a_file_deleted_offline_while_open_still_reads_and_takes_writes`.
|
||||
|
||||
## B185 — A new file written again just as it starts uploading waits out a retry
|
||||
|
||||
**Status:** Fixed (unverified).
|
||||
|
||||
@@ -107,6 +107,8 @@ by its local id, in the queue, the stored tree and pins alike.
|
||||
(B184).
|
||||
- **A new file written again just as it starts uploading no longer waits out a retry** before
|
||||
it reaches Drive (B185).
|
||||
- **A file deleted while open can still be read and written until it is closed**, offline too.
|
||||
A write into it no longer failed with "Input/output error" (B186).
|
||||
- **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).
|
||||
|
||||
@@ -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 B185.
|
||||
- Fixes from the simulation and account runs since then: B125, B127, B130 and B141 to B186.
|
||||
- **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.
|
||||
@@ -111,7 +111,8 @@ Tracks `docs/MILESTONE-3.0.0.md`. Update it with every commit that moves a phase
|
||||
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`. The rerun on 3073052 found a create that waited out
|
||||
a retry after a write replaced its blob (B185, fixed).
|
||||
a retry after a write replaced its blob (B185, fixed), and a file deleted offline
|
||||
while open that lost the bytes its handle read (B186, fixed; older than 3.0.0).
|
||||
- [ ] 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
|
||||
|
||||
Reference in new issue
Block a user