pub trait PipeLog: Sized {
// Required methods
fn read_bytes(&self, handle: FileBlockHandle) -> Result<Vec<u8>>;
fn append<T: ReactiveBytes + ?Sized>(
&self,
queue: LogQueue,
bytes: &mut T,
) -> Result<FileBlockHandle>;
fn sync(&self, queue: LogQueue) -> Result<()>;
fn file_span(&self, queue: LogQueue) -> (FileSeq, FileSeq);
fn total_size(&self, queue: LogQueue) -> usize;
fn rotate(&self, queue: LogQueue) -> Result<()>;
fn purge_to(&self, file_id: FileId) -> Result<usize>;
// Provided method
fn file_at(&self, queue: LogQueue, position: f64) -> FileSeq { ... }
}
Expand description
A PipeLog
serves reads and writes over multiple queues of log files.
§Safety
The pipe will panic if it encounters an unrecoverable failure. Otherwise the operations on it should be atomic, i.e. failed operation will not affect other ones, and user can still use it afterwards without breaking consistency.
Required Methods§
Sourcefn read_bytes(&self, handle: FileBlockHandle) -> Result<Vec<u8>>
fn read_bytes(&self, handle: FileBlockHandle) -> Result<Vec<u8>>
Reads some bytes from the specified position.
Sourcefn append<T: ReactiveBytes + ?Sized>(
&self,
queue: LogQueue,
bytes: &mut T,
) -> Result<FileBlockHandle>
fn append<T: ReactiveBytes + ?Sized>( &self, queue: LogQueue, bytes: &mut T, ) -> Result<FileBlockHandle>
Appends some bytes to the specified log queue. Returns file position of the written bytes.
Sourcefn sync(&self, queue: LogQueue) -> Result<()>
fn sync(&self, queue: LogQueue) -> Result<()>
Synchronizes all buffered writes.
This operation might incurs a great latency overhead. It’s advised to call it once every batch of writes.
Sourcefn file_span(&self, queue: LogQueue) -> (FileSeq, FileSeq)
fn file_span(&self, queue: LogQueue) -> (FileSeq, FileSeq)
Returns the smallest and largest file sequence number, still in use, of the specified log queue.
Sourcefn total_size(&self, queue: LogQueue) -> usize
fn total_size(&self, queue: LogQueue) -> usize
Returns total size of the specified log queue.
Provided Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.