fix(core,fuse): un-park abandoned creates, retire orphan staged bytes, serialise refreshes

Four faults found by reading the journal for issues that were never fixed,
tracked as B94-B97 in docs/BUGS.md.

A create parked behind a temp-file rename (B70) had no exit but that rename,
so 43 uploads sat in the queue for weeks holding their staged bytes. The
primary drain worker now sweeps parked creates while the queue is idle: one
whose node is gone is discarded, and one older than PARK_EXPIRY_MS that nobody
holds open is un-parked rather than dropped, since staged bytes are the only
copy of the write. An open node stays parked however old it is.

.tmp and .temp leave TRANSIENT_SUFFIXES. The list served two mechanisms with
different consequences: ignoring a name during mirror reconcile is reversible,
parking a create is not, and a Takeout index.tmp is a final name that nothing
will ever rename.

Staged blobs that match no queued op and name no node were kept forever and
warned about once per blob per mount (95 blobs, ~445 MiB, oldest two months).
Blobs past STAGING_ORPHAN_RETAIN are retired; the rest are one aggregated
warning.

Refresh control requests now run one per scope. Every scope is individually
cheap, but duplicates contend for the database lock the running refresh holds,
which left five in flight for twenty-three minutes. request_kind names the
scope so the report says which view wedged. The photo metadata pass also stops
at shutdown instead of running into the cancelled runtime and logging one
"skipping undecryptable photo" per node.
This commit is contained in:
nvrl committed 2026-09-19 20:29:48 +02:00
1 parent 6cc8f72bab
commit 860d29cfe8
14 files changed
+712 -68

No files matched your search

Generated
+4 -4
View File
@@ -3372,7 +3372,7 @@ checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4"
[[package]]
name = "pdfs-cli"
version = "1.11.0"
version = "1.11.1"
dependencies = [
"anyhow",
"clap",
@@ -3387,7 +3387,7 @@ dependencies = [
[[package]]
name = "pdfs-core"
version = "1.11.0"
version = "1.11.1"
dependencies = [
"async-trait",
"dbus-secret-service-keyring-store",
@@ -3411,7 +3411,7 @@ dependencies = [
[[package]]
name = "pdfs-fuse"
version = "1.11.0"
version = "1.11.1"
dependencies = [
"base64 0.23.1",
"fuser",
@@ -3431,7 +3431,7 @@ dependencies = [
[[package]]
name = "pdfs-gui"
version = "1.11.0"
version = "1.11.1"
dependencies = [
"anyhow",
"async-channel",