pub struct GroupCommit { /* private fields */ }Expand description
Cooperative WAL flush coordinator.
Owned by the super::transaction::TransactionManager; cheap to
share across writers via Arc.
Implementations§
Source§impl GroupCommit
impl GroupCommit
Sourcepub fn new(initial_durable_lsn: u64) -> Self
pub fn new(initial_durable_lsn: u64) -> Self
Create a new coordinator initialised with the WAL’s current
durable position. Pass wal.durable_lsn() from a freshly
opened WalWriter.
Sourcepub fn flushed_lsn(&self) -> u64
pub fn flushed_lsn(&self) -> u64
Highest LSN that is known durable on disk. Cheap atomic read, no lock taken. Used by tests and by the diagnostics surface.
Sourcepub fn commit_at_least(&self, target: u64, wal: &Mutex<WalWriter>) -> Result<()>
pub fn commit_at_least(&self, target: u64, wal: &Mutex<WalWriter>) -> Result<()>
Block the caller until the WAL is durable up to at least
target. If another writer is already mid-flush, piggyback
on it; otherwise become the leader and do the fsync ourselves.
wal is the same Mutex<WalWriter> the transaction manager
holds. The leader briefly takes that lock to call sync().
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for GroupCommit
impl RefUnwindSafe for GroupCommit
impl Send for GroupCommit
impl Sync for GroupCommit
impl Unpin for GroupCommit
impl UnsafeUnpin for GroupCommit
impl UnwindSafe for GroupCommit
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
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>
Converts
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>
Converts
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request