pub struct FileStorage { /* private fields */ }Expand description
High-throughput file-backed storage.
Design:
- One append-only log file per stream (
data.log) - In-memory offset/file index for fast reads
- Stream-level write lock serializes appends and preserves monotonic offsets
- Batched write per append call reduces syscall overhead
sync_on_append = false prioritizes throughput and may lose recently
appended data on crash. sync_on_append = true trades latency for stronger
durability semantics.
Implementations§
Source§impl FileStorage
impl FileStorage
Sourcepub fn new(
root_dir: impl Into<PathBuf>,
max_total_bytes: u64,
max_stream_bytes: u64,
sync_on_append: bool,
) -> Result<Self>
pub fn new( root_dir: impl Into<PathBuf>, max_total_bytes: u64, max_stream_bytes: u64, sync_on_append: bool, ) -> Result<Self>
Create or reopen a file-backed storage root.
Existing streams under root_dir are discovered and indexed during
startup so subsequent reads can serve offsets without rescanning files.
§Errors
Returns Error::Storage if the root directory cannot be created or
existing streams fail to load from disk.
Sourcepub fn total_bytes(&self) -> u64
pub fn total_bytes(&self) -> u64
Return the currently tracked total payload bytes across all streams.
Trait Implementations§
Source§impl Storage for FileStorage
impl Storage for FileStorage
Source§fn create_stream(
&self,
name: &str,
config: StreamConfig,
) -> Result<CreateStreamResult>
fn create_stream( &self, name: &str, config: StreamConfig, ) -> Result<CreateStreamResult>
Create a stream entry with immutable configuration. Read more
Source§fn append(&self, name: &str, data: Bytes, content_type: &str) -> Result<Offset>
fn append(&self, name: &str, data: Bytes, content_type: &str) -> Result<Offset>
Append one message to an existing stream. Read more
Source§fn batch_append(
&self,
name: &str,
messages: Vec<Bytes>,
content_type: &str,
seq: Option<&str>,
) -> Result<Offset>
fn batch_append( &self, name: &str, messages: Vec<Bytes>, content_type: &str, seq: Option<&str>, ) -> Result<Offset>
Append a batch of messages as one atomic operation. Read more
Source§fn read(&self, name: &str, from_offset: &Offset) -> Result<ReadResult>
fn read(&self, name: &str, from_offset: &Offset) -> Result<ReadResult>
Read from a stream starting at
from_offset. Read moreSource§fn delete(&self, name: &str) -> Result<()>
fn delete(&self, name: &str) -> Result<()>
Delete a stream and all of its persisted data. Read more
Source§fn head(&self, name: &str) -> Result<StreamMetadata>
fn head(&self, name: &str) -> Result<StreamMetadata>
Return stream metadata without reading message bodies. Read more
Source§fn close_stream(&self, name: &str) -> Result<()>
fn close_stream(&self, name: &str) -> Result<()>
Mark a stream closed so future appends are rejected. Read more
Source§fn append_with_producer(
&self,
name: &str,
messages: Vec<Bytes>,
content_type: &str,
producer: &ProducerHeaders,
should_close: bool,
seq: Option<&str>,
) -> Result<ProducerAppendResult>
fn append_with_producer( &self, name: &str, messages: Vec<Bytes>, content_type: &str, producer: &ProducerHeaders, should_close: bool, seq: Option<&str>, ) -> Result<ProducerAppendResult>
Append with idempotent producer sequencing. Read more
Source§fn create_stream_with_data(
&self,
name: &str,
config: StreamConfig,
messages: Vec<Bytes>,
should_close: bool,
) -> Result<CreateWithDataResult>
fn create_stream_with_data( &self, name: &str, config: StreamConfig, messages: Vec<Bytes>, should_close: bool, ) -> Result<CreateWithDataResult>
Atomically create a stream, optionally seed it with data, and optionally close it. Read more
Source§fn subscribe(&self, name: &str) -> Option<Receiver<()>>
fn subscribe(&self, name: &str) -> Option<Receiver<()>>
Subscribe to notifications for new data on a stream. Read more
Source§fn cleanup_expired_streams(&self) -> usize
fn cleanup_expired_streams(&self) -> usize
Proactively remove all expired streams, returning the count deleted. Read more
Auto Trait Implementations§
impl !Freeze for FileStorage
impl RefUnwindSafe for FileStorage
impl Send for FileStorage
impl Sync for FileStorage
impl Unpin for FileStorage
impl UnsafeUnpin for FileStorage
impl UnwindSafe for FileStorage
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more