Skip to main content

Module transaction

Module transaction 

Source
Expand description

Multi-file writes, one file at a time.

Two primitives, used by the user-scope skill installer and by the repository landing. A lock serializes writers over one target. A stage writes every intended byte beside its destination and replaces it by rename.

What this guarantees, and what it does not. Each replacement is atomic on its own; the set is not. A run the process does not finish leaves whole files and the record the previous run wrote, and running it again finishes the rest. Recovery after power loss rests on the persistence order below and on the platform’s fsync semantics, and is claimed no further.

The persistence order is fixed and the same for every domain. Each scratch file is written and synced, then renamed over its destination, then the destination’s directory synced. The record is replaced last.

Modules§

lock
An OS advisory lock with holder metadata.
stage
Scratch files beside their destinations.

Functions§

sync_dir
Flush a directory entry, so a rename into it survives a crash.
sync_parent
Flush the directory holding path, where it has one.