You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Roadmap item — the one remaining direction from the exploratory durability-hardening issue #9 (its other two directions, the versioned WAL header and the expanded DST fault profiles, shipped in v0.2.0 / PR #43). The kernel fsyncs on every commit: correct, simple, and the right DEFAULT — but per-commit fsync caps write throughput. The standard answer is group commit: several commits share one fsync, trading a bounded, explicitly documented durability window for throughput (cf. Postgres synchronous_commit, SQLite WAL).
Opt-in only; the default stays fsync-per-commit. Nothing may quietly weaken the default durability contract in docs/RELIABILITY.md.
The mode's exact guarantee must be spelled out: what a crash can lose (commits acknowledged inside the open window) and when the window closes.
Must stay honest with the synchronous single-process model and interact correctly with the v0.2.0 failure latch (a failed batched fsync must latch exactly like a failed per-commit fsync, and the affected commits must be reported as NOT durable).
Open questions
API surface: an open() option (durability: "batched" + flush() fence), or an explicit db.batch(run) scope? The second keeps the window visible in the code that accepts it.
If ratified: implementation behind the opt-in, SimFS reordering profile, DST seeds proving the bounded-loss contract, RELIABILITY.md section for the mode.
Summary
Roadmap item — the one remaining direction from the exploratory durability-hardening issue #9 (its other two directions, the versioned WAL header and the expanded DST fault profiles, shipped in v0.2.0 / PR #43). The kernel fsyncs on every commit: correct, simple, and the right DEFAULT — but per-commit fsync caps write throughput. The standard answer is group commit: several commits share one fsync, trading a bounded, explicitly documented durability window for throughput (cf. Postgres synchronous_commit, SQLite WAL).
Ground rules (carried from #9, still binding)
Open questions
open()option (durability: "batched"+flush()fence), or an explicitdb.batch(run)scope? The second keeps the window visible in the code that accepts it.pending()count) so callers can build their own fences.Deliverables