Documentation
¶
Overview ¶
Package fileutil provides durable filesystem helpers shared by package main and internal/* packages (ADR-0003). It has no dependency on the rest of Culvert (stdlib only).
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrReplacedNotSynced = errors.New("atomic write: target replaced but parent directory not synced")
ErrReplacedNotSynced marks an AtomicWrite failure that occurred AFTER the rename: the target file already carries the new content (visible to every reader, and on the overwhelming majority of filesystems durable), but the parent-directory sync failed, so the rename's durability across an immediate crash is not guaranteed. Callers running compensating rollbacks must NOT restore prior in-memory state on this error — memory would then contradict the visible file, and a restart would load the "rolled back" content anyway. Test with errors.Is.
Functions ¶
func AtomicWrite ¶
AtomicWrite writes data to path atomically: it writes to a unique temp file in the same directory, chmods, fsyncs the file, renames over the target, and best-effort fsyncs the parent directory. A crash mid-write never leaves a partial or corrupt target file. Moved verbatim from package main's atomicWriteFile (ADR-0003); behaviour is unchanged.
Every failure branch additionally notifies the write-failure observer (CHAOS-45) so error-discarding callers cannot fail silently.
func SetWriteFailureObserver ¶ added in v1.0.175
SetWriteFailureObserver publishes the durable-write failure observer. Published once at startup by package main. A nil fn clears the observer, which is what tests use to restore the default no-op state.
func SetWriteSuccessObserver ¶ added in v1.0.175
func SetWriteSuccessObserver(fn func(path string))
SetWriteSuccessObserver publishes the durable-write success observer. Nil clears it. See writeOKObserver for why successes are observed at all.
Types ¶
type RotatingFile ¶ added in v1.0.16
type RotatingFile struct {
// contains filtered or unexported fields
}
RotatingFile wraps a log file and rotates it when it exceeds maxBytes.
func NewRotatingFile ¶ added in v1.0.16
func NewRotatingFile(path string, maxMB int) (*RotatingFile, error)
NewRotatingFile opens path for append and returns a writer that rotates the file to path+".1" when it exceeds maxMB (<=0 falls back to 50 MB).
func (*RotatingFile) Close ¶ added in v1.0.16
func (r *RotatingFile) Close() error
Close closes the underlying file.