pub struct Journal<E: Storage + Metrics, A: CodecFixed<Cfg = ()>> { /* private fields */ }
Expand description
Implementation of Journal
storage.
Implementations§
Source§impl<E: Storage + Metrics, A: CodecFixed<Cfg = ()>> Journal<E, A>
impl<E: Storage + Metrics, A: CodecFixed<Cfg = ()>> Journal<E, A>
Sourcepub async fn init(context: E, cfg: Config) -> Result<Self, Error>
pub async fn init(context: E, cfg: Config) -> Result<Self, Error>
Initialize a new Journal
instance.
All backing blobs are opened but not read during initialization. The replay
method can be
used to iterate over all items in the Journal
.
§Repair
Like sqlite and rocksdb, the first invalid data read will be considered the new end of the journal (and the underlying Blob will be truncated to the last valid item).
Sourcepub async fn size(&self) -> Result<u64, Error>
pub async fn size(&self) -> Result<u64, Error>
Return the total number of items in the journal, irrespective of pruning. The next value appended to the journal will be at this position.
Sourcepub async fn append(&mut self, item: A) -> Result<u64, Error>
pub async fn append(&mut self, item: A) -> Result<u64, Error>
Append a new item to the journal. Return the item’s position in the journal, or error if the operation fails.
Sourcepub async fn rewind(&mut self, size: u64) -> Result<(), Error>
pub async fn rewind(&mut self, size: u64) -> Result<(), Error>
Rewind the journal to the given size
. Returns Error::MissingBlob if the rewind point
precedes the oldest retained element point. The journal is not synced after rewinding.
§Warnings
- This operation is not guaranteed to survive restarts until sync is called.
- This operation is not atomic, but it will always leave the journal in a consistent state in the event of failure since blobs are always removed from newest to oldest.
Sourcepub async fn oldest_retained_pos(&self) -> Result<Option<u64>, Error>
pub async fn oldest_retained_pos(&self) -> Result<Option<u64>, Error>
Return the position of the oldest item in the journal that remains readable.
Note that this value could be older than the min_item_pos
last passed to prune.
Sourcepub async fn read(&self, pos: u64) -> Result<A, Error>
pub async fn read(&self, pos: u64) -> Result<A, Error>
Read the item at position pos
in the journal.
§Errors
- Error::ItemPruned if the item at position
pos
is pruned. - Error::ItemOutOfRange if the item at position
pos
does not exist.
Sourcepub async fn replay(
&self,
buffer: NonZeroUsize,
start_pos: u64,
) -> Result<impl Stream<Item = Result<(u64, A), Error>> + '_, Error>
pub async fn replay( &self, buffer: NonZeroUsize, start_pos: u64, ) -> Result<impl Stream<Item = Result<(u64, A), Error>> + '_, Error>
Sourcepub async fn prune(&mut self, min_item_pos: u64) -> Result<bool, Error>
pub async fn prune(&mut self, min_item_pos: u64) -> Result<bool, Error>
Allow the journal to prune items older than min_item_pos
. The journal may not prune all
such items in order to preserve blob boundaries, but the amount of such items will always be
less than the configured number of items per blob. Returns true if any items were pruned.
Note that this operation may NOT be atomic, however it’s guaranteed not to leave gaps in the event of failure as items are always pruned in order from oldest to newest.
Auto Trait Implementations§
impl<E, A> Freeze for Journal<E, A>
impl<E, A> !RefUnwindSafe for Journal<E, A>
impl<E, A> Send for Journal<E, A>where
A: Send,
impl<E, A> Sync for Journal<E, A>where
A: Sync,
impl<E, A> Unpin for Journal<E, A>
impl<E, A> !UnwindSafe for Journal<E, A>
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
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more