Skip to main content

RetrievalFailureLogger

Struct RetrievalFailureLogger 

Source
pub struct RetrievalFailureLogger { /* private fields */ }
Expand description

Async background writer that batches retrieval failure records to SQLite.

Construct with RetrievalFailureLogger::new and call RetrievalFailureLogger::log from the recall hot path. Records are sent via a bounded channel; if the channel is full the record is silently dropped (zero hot-path latency, per INV-1).

Fields are Option so that shutdown can take them without a move-out-of-Drop conflict, and so the Drop impl can abort any task not yet drained. tx is declared before handle to ensure the channel is closed before the handle is dropped, which allows the background task to exit cleanly when Drop fires.

Implementations§

Source§

impl RetrievalFailureLogger

Source

pub fn new( sqlite: SqliteStore, channel_capacity: usize, batch_size: usize, flush_interval: Duration, retention_days: u32, ) -> Self

Spawn the background writer task and return a logger handle.

batch_size records are flushed at once, or after flush_interval elapses, whichever comes first. Old records are purged every CLEANUP_FLUSH_INTERVAL batch flushes according to retention_days.

Source

pub fn log(&self, record: RetrievalFailureRecord)

Queue a retrieval failure record for async persistence.

Both query_text (512 chars) and error_context (256 chars) are truncated before enqueueing to bound in-channel memory usage (INV-3). If the channel is full the record is dropped and a debug message is emitted (INV-1).

Source

pub async fn shutdown(self)

Shut down the background writer, draining any queued records.

Closes the sender and waits for the background task to complete. Drop is best-effort only; call this method for a clean drain on process exit.

Trait Implementations§

Source§

impl Drop for RetrievalFailureLogger

Source§

fn drop(&mut self)

Abort the background writer task on drop.

For a clean drain (flushing queued records) call RetrievalFailureLogger::shutdown explicitly before dropping. This impl ensures the task is not silently detached.

Auto Trait Implementations§

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<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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