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 async fn with_disk_persistence( self, root_path: PathBuf, max_disk_size_bytes: u64, storage_max_disk_ratio: f64, disk_usage_retriever: Arc<dyn DiskUsageRetriever + Send + Sync>, ) -> 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 cannot 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 the given 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 async fn push(&mut self, entry: T) -> Result<PushResult, GenericError>

Enqueues an entry.

If the queue is full and the entry cannot be enqueue in-memory, and disk persistence is enabled, in-memory entries will be moved to disk (oldest first) until enough capacity is available to enqueue the new entry in-memory.

§Errors

If the entry is too large to fit into the queue, or if there is an error when persisting entries to disk, 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 the normal limiting behavior in terms of maximum on-disk size. When disk persistence is not 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> Freeze for RetryQueue<T>

§

impl<T> !RefUnwindSafe 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> !UnwindSafe 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> 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_allocations(self, token: AllocationGroupToken) -> Tracked<Self>

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

fn in_current_allocation_group(self) -> Tracked<Self>

Instruments this type by attaching the current allocation 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
Source§

impl<T> ErasedDestructor for T
where T: 'static,