Add CRC32C checksums to WAL record format (v2), implement crash recovery with automatic truncation of corrupt records, add feature-gated group commit buffer for batched fsync under concurrent load, and implement log rotation via segment files with global offset addressing. Key changes: - Record format v2: [len:u32][crc32c:u32][blake3:32][payload:N] - recover_file() scans and truncates corrupt tail records - GroupCommitBuffer batches fsync via MPSC channel (tokio feature gate) - SegmentManager with binary search resolution and cursor-based cleanup - Journal::read() auto-refreshes segments on miss for writer/reader split - Split recovery.rs and key_codec.rs into directory modules for 500-line max Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
29 lines
834 B
Rust
29 lines
834 B
Rust
use thiserror::Error;
|
|
|
|
/// Result type for storage operations.
|
|
pub type Result<T> = std::result::Result<T, StorageError>;
|
|
|
|
/// Errors that can occur during storage operations.
|
|
#[derive(Error, Debug)]
|
|
pub enum StorageError {
|
|
/// IO error interacting with the storage backend.
|
|
#[error("Storage IO error: {0}")]
|
|
Io(#[from] std::io::Error),
|
|
|
|
/// Error from the underlying storage backend (fjall, redb, etc.).
|
|
#[error("Backend error: {0}")]
|
|
Backend(String),
|
|
|
|
/// Serialization/Deserialization error.
|
|
#[error("Serialization error: {0}")]
|
|
Serialization(String),
|
|
|
|
/// Key not found in storage.
|
|
#[error("Key not found: {0}")]
|
|
NotFound(String),
|
|
|
|
/// Input validation error (e.g., dimension mismatch, invalid values).
|
|
#[error("Input validation error: {0}")]
|
|
InputValidation(String),
|
|
}
|