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,
impl<T> RetryQueue<T>where
T: Retryable,
Sourcepub fn new(queue_name: String, max_in_memory_bytes: u64) -> Self
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.
Sourcepub 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>
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.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if the queue is empty.
This includes both in-memory and persisted entries.
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of entries in the queue
This includes both in-memory and persisted entries.
Sourcepub async fn push(&mut self, entry: T) -> Result<PushResult, GenericError>
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.
Sourcepub async fn pop(&mut self) -> Result<Option<T>, GenericError>
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.
Sourcepub async fn flush(self) -> Result<PushResult, GenericError>
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> 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> 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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Track for T
impl<T> Track for T
Source§fn track_allocations(self, token: AllocationGroupToken) -> Tracked<Self>
fn track_allocations(self, token: AllocationGroupToken) -> Tracked<Self>
Tracked
wrapper. Read moreSource§fn in_current_allocation_group(self) -> Tracked<Self>
fn in_current_allocation_group(self) -> Tracked<Self>
Tracked
wrapper. Read more