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
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>
§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
§Panics
Panics if the internal total_bytes lock is poisoned.
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 new stream 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 data to a 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 multiple messages atomically Read more
Source§fn read(&self, name: &str, from_offset: &Offset) -> Result<ReadResult>
fn read(&self, name: &str, from_offset: &Offset) -> Result<ReadResult>
Read messages from a stream starting at offset 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 messages with producer sequencing (atomic validation + append) 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 with optional initial data and close. 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