Skip to main content

RetryQueue

Struct RetryQueue 

Source
pub struct RetryQueue<T> { /* private fields */ }
Expand description

A queue for storing requests to be retried.

Implementations§

Source§

impl<T> RetryQueue<T>
where T: Retryable,

Source

pub fn new(queue_name: String, max_in_memory_bytes: u64) -> Self

Creates a new RetryQueue instance with the given name and maximum size.

The queue will only hold as many entries as can fit within the given maximum size. If the queue is full, the oldest entries will be removed (or potentially persisted to disk, see with_disk_persistence) to make room for new entries.

Source

pub fn with_flush_to_disk_mem_ratio(self, flush_to_disk_mem_ratio: f64) -> Self

Configures the ratio of in-memory queue bytes to flush to disk when the queue is full.

When disk persistence is enabled and the queue does not have enough room for a new entry, this ratio controls how much in-memory data is moved to disk. For example, a value of 0.5 moves at least half of max_in_memory_bytes to disk when the queue overflows. Values less than or equal to zero disable extra batch flushing, but entries evicted to make room are still persisted when disk persistence is enabled.

Source

pub async fn with_disk_persistence( self, args: PersistedQueueArgs, ) -> Result<Self, GenericError>

Configures the queue to persist pending entries to disk.

Disk persistence is used as a fallback to in-memory storage when the queue is full. When attempting to add a new entry to the queue, and the queue can’t fit the entry in-memory, in-memory entries will be persisted to disk, oldest first.

When reading entries from the queue, in-memory entries are read first, followed by persisted entries. This provides priority to the most recent entries added to the queue, but allows for bursting over the configured in-memory size limit without having to immediately discard entries.

Files are stored in a subdirectory, with the same name as the given queue name, within args.root_path.

§Errors

If there is an error initializing the disk persistence layer, an error is returned.

Source

pub fn is_empty(&self) -> bool

Returns true if the queue is empty.

This includes both in-memory and persisted entries.

Source

pub fn len(&self) -> usize

Returns the number of entries in the queue

This includes both in-memory and persisted entries.

Source

pub const fn max_in_memory_bytes(&self) -> u64

Returns the maximum in-memory capacity, in bytes.

Source

pub const fn available_in_memory_capacity_bytes(&self) -> u64

Returns the available in-memory capacity, in bytes.

Source

pub async fn available_on_disk_capacity_bytes( &self, ) -> Result<u64, GenericError>

Returns the available on-disk capacity, in bytes.

Returns 0 when disk persistence is not enabled.

§Errors

If disk persistence is enabled and there is an error while retrieving the underlying disk capacity, an error is returned.

Source

pub fn take_persisted_entries_dropped(&mut self) -> u64

Returns the number of persisted entries that have been permanently dropped due to errors since the last call to this method, resetting the counter.

Always returns 0 if disk persistence isn’t enabled.

Source

pub async fn push(&mut self, entry: T) -> Result<PushResult, GenericError>

Enqueues an entry.

If the queue is full and the entry can’t be enqueued in-memory, in-memory entries (oldest first) are evicted until there is room for the new entry. When disk persistence is enabled, evicted entries are moved to disk. If the flush-to-disk ratio is greater than zero, eviction moves at least max_in_memory_bytes * flush_to_disk_mem_ratio bytes of in-memory data to disk before admitting the new entry. If disk persistence is disabled, evicted entries are dropped instead. If an in-memory entry can’t be persisted due to a disk error, that entry is dropped and counted in the returned PushResult; the new entry is still enqueued.

§Errors

If the entry is too large to fit into the queue, an error is returned.

Source

pub async fn pop(&mut self) -> Result<Option<T>, GenericError>

Consumes an entry.

In-memory entries are consumed first, followed by persisted entries if disk persistence is enabled.

If no entries are available, None is returned.

§Errors

If there is an error when consuming an entry from disk, whether due to reading or deserializing the entry, an error is returned.

Source

pub async fn flush(self) -> Result<PushResult, GenericError>

Flushes all entries, potentially persisting them to disk.

When disk persistence is configured, this will flush all in-memory entries to disk. Flushing to disk still obeys the normal limiting behavior in terms of maximum on-disk size. When disk persistence isn’t enabled, all in-memory entries will be dropped.

§Errors

If an error occurs while persisting an entry to disk, an error is returned.

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for RetryQueue<T>

§

impl<T> !UnwindSafe for RetryQueue<T>

§

impl<T> Freeze for RetryQueue<T>

§

impl<T> Send for RetryQueue<T>
where T: Send,

§

impl<T> Sync for RetryQueue<T>
where T: Sync,

§

impl<T> Unpin for RetryQueue<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for RetryQueue<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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 more
Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Track for T

Source§

fn track_resources(self, token: ResourceGroupToken) -> Tracked<Self>

Instruments this type by attaching the given resource group token, returning a Tracked wrapper. Read more
Source§

fn in_current_resource_group(self) -> Tracked<Self>

Instruments this type by attaching the current resource group, returning a Tracked wrapper. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more