Expand description
Per-core WAL segments - Thread-per-core WAL for lock-free writes
§Per-Core WAL
Per-core WAL segments for thread-per-core architecture. Each core writes to its own WAL file without contention, and segments are merged during checkpoint for global recovery.
§Architecture
┌─────────────────────────────────────────────────────────────────┐
│ Thread-Per-Core with Per-Core WAL │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Core 0 │ │ Core 1 │ │ Core 2 │ │
│ │ │ │ │ │ │ │
│ │ Changelog │ │ Changelog │ │ Changelog │ │
│ │ │ │ │ │ │ │ │ │ │
│ │ ▼ │ │ ▼ │ │ ▼ │ │
│ │ wal-0.log │ │ wal-1.log │ │ wal-2.log │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ └─────────────────┼─────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Checkpoint │ │
│ │ Coordinator │ │
│ │ │ │
│ │ Merge segments │ │
│ │ by epoch order │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘§Key Components
CoreWalWriter: Per-core WAL writer (lock-free, no cross-core sync)PerCoreWalEntry: WAL entry with epoch for cross-core orderingPerCoreWalReader: Reader for a single segment filePerCoreWalManager: Coordinates all core writersCheckpointCoordinator: Merges segments during checkpointPerCoreRecoveryManager: Recovery from multiple segments
§Core Invariant
Checkpoint(epoch) + WAL.replay(epoch..current) = Consistent StateEntries are ordered by (epoch, timestamp_ns) for deterministic recovery.
§Example
use laminar_storage::per_core_wal::{
PerCoreWalConfig, PerCoreWalManager, WalOperation,
};
use std::path::Path;
// Create manager for 4 cores
let config = PerCoreWalConfig::new(Path::new("/data/wal"), 4);
let mut manager = PerCoreWalManager::new(config).unwrap();
// Each core writes to its own segment (lock-free)
manager.writer(0).append_put(b"key1", b"value1").unwrap();
manager.writer(1).append_put(b"key2", b"value2").unwrap();
manager.writer(0).sync().unwrap();
manager.writer(1).sync().unwrap();
// During checkpoint, merge all segments
let merged = manager.merge_segments().unwrap();
// merged is sorted by (epoch, timestamp_ns)Structs§
- Checkpoint
Coordinator - Coordinates checkpointing across all per-core WAL segments.
- Core
WalWriter - Per-core WAL writer.
- PerCore
Recovered State - Recovered state from per-core WAL.
- PerCore
Recovery Manager - Recovery manager for per-core WAL segments.
- PerCore
WalConfig - Configuration for per-core WAL.
- PerCore
WalEntry - Per-core WAL entry with epoch for cross-core ordering.
- PerCore
WalManager - Per-core WAL manager.
- PerCore
WalReader - Per-core WAL reader for a single segment file.
- Segment
Stats - Statistics for a single WAL segment.
Enums§
- PerCore
WalError - Errors that can occur in per-core WAL operations.
- WalOperation
- Operations that can be logged in the WAL.
Functions§
- recover_
per_ core - Convenience function to recover from per-core WAL.