pub struct PendingQueue<S: StorageEngine> { /* private fields */ }Expand description
Durable outbound pending-op queue backed by Namespace::ArrayDelta.
Implementations§
Source§impl<S: StorageEngine> PendingQueue<S>
impl<S: StorageEngine> PendingQueue<S>
Sourcepub const DEFAULT_CAP: usize = 100_000
pub const DEFAULT_CAP: usize = 100_000
Default maximum number of pending ops before backpressure kicks in.
Sourcepub fn with_cap(storage: Arc<S>, cap: usize) -> Self
pub fn with_cap(storage: Arc<S>, cap: usize) -> Self
Create a queue with a custom cap (useful for tests with small limits).
Sourcepub async fn enqueue(&self, op: &ArrayOp) -> Result<(), LiteError>
pub async fn enqueue(&self, op: &ArrayOp) -> Result<(), LiteError>
Enqueue a single op.
Returns LiteError::Backpressure when len() >= cap to prevent
unbounded queue growth during prolonged offline operation.
Sourcepub async fn scan_after(
&self,
after: Option<Hlc>,
limit: usize,
) -> Result<Vec<PendingArrayOp>, LiteError>
pub async fn scan_after( &self, after: Option<Hlc>, limit: usize, ) -> Result<Vec<PendingArrayOp>, LiteError>
Return up to limit queued ops with an HLC strictly greater than
after, in FIFO order. None starts at the head of the queue.
Sourcepub async fn set_seq(&self, hlc: Hlc, seq: u64) -> Result<bool, LiteError>
pub async fn set_seq(&self, hlc: Hlc, seq: u64) -> Result<bool, LiteError>
Persist seq as the stream seq of the op queued under hlc.
Returns false when the op is no longer queued. The push loop calls
this only for an op it has not sent yet, so no ack or reject can
remove the op between the read and the write.
Sourcepub async fn retire(&self, hlcs: &[Hlc]) -> Result<u64, LiteError>
pub async fn retire(&self, hlcs: &[Hlc]) -> Result<u64, LiteError>
Remove every op named in hlcs in one atomic write.
Ops no longer queued are skipped. Returns the number removed.
Sourcepub async fn drain_batch(&self, limit: usize) -> Result<Vec<ArrayOp>, LiteError>
pub async fn drain_batch(&self, limit: usize) -> Result<Vec<ArrayOp>, LiteError>
Return up to limit ops in FIFO order (lowest HLC first).
Does not remove the returned ops — call [ack_through] after they are
confirmed by Origin.
Sourcepub async fn ack_through(&self, ack_hlc: Hlc) -> Result<u64, LiteError>
pub async fn ack_through(&self, ack_hlc: Hlc) -> Result<u64, LiteError>
Remove all ops whose header.hlc <= ack_hlc.
Called after Origin acknowledges a batch up to ack_hlc. Returns the
number of ops removed.
Sourcepub async fn is_empty(&self) -> Result<bool, LiteError>
pub async fn is_empty(&self) -> Result<bool, LiteError>
Returns true if the queue contains no pending ops.
Sourcepub async fn remove(&self, hlc: Hlc) -> Result<bool, LiteError>
pub async fn remove(&self, hlc: Hlc) -> Result<bool, LiteError>
Remove a single op identified by hlc from the queue.
Returns true if the op existed and was deleted, false if it was
not present (idempotent — safe to call on already-acked ops).
Used by the inbound reject handler to roll back a single optimistic local write without touching the rest of the queue.
Auto Trait Implementations§
impl<S> Freeze for PendingQueue<S>
impl<S> RefUnwindSafe for PendingQueue<S>where
Arc<S>: RefUnwindSafe,
impl<S> Send for PendingQueue<S>
impl<S> Sync for PendingQueue<S>
impl<S> Unpin for PendingQueue<S>
impl<S> UnsafeUnpin for PendingQueue<S>where
Arc<S>: UnsafeUnpin,
impl<S> UnwindSafe for PendingQueue<S>where
Arc<S>: UnwindSafe,
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ErasedDestructor for Twhere
T: 'static,
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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.impl<T> NodeDbMarker for T
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.