Skip to main content

ArticleAvailability

Struct ArticleAvailability 

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

Track which backends are known not to have a specific article.

Uses a usize bitset to track which backends returned authoritative 430.

§Example with 2 backends

  • Initial state: missing=00 (no backend is known missing)
  • After backend 0 returns 430: missing=01 (backend 0 doesn’t have it)
  • If both return 430: missing=11 (all backends exhausted)

§Usage Pattern

This type serves two critical purposes:

  1. Cache persistence - Track availability across requests (long-lived)

    • Store authoritative negative facts in cache entries
    • Avoid querying backends known to be missing
    • Updated only after 430 responses
  2. 430 retry loop - Track which backends tried during single request (transient)

    • Create fresh instance for each ARTICLE request
    • Mark backends as missing when they return 430
    • Stop when all backends exhausted or one succeeds

§Concurrency

Cache entries store this value directly. Memory-cache updates use atomic per-key merge operations, and hybrid-cache updates use per-key locks before replacing an entry. Request-local retry state owns a separate copy, then records each 430 fact directly to the cache.

Implementations§

Source§

impl ArticleAvailability

Source

pub const fn new() -> Self

Create empty availability - assume all backends have article until proven otherwise

Source

pub fn record_missing(&mut self, backend_id: BackendId) -> &mut Self

Record that a backend returned 430 (doesn’t have the article).

Once marked missing, the backend should not be retried for this cache entry. Later positive observations do not clear the missing bit.

Source

pub fn is_missing(&self, backend_id: BackendId) -> bool

Check if a backend is known to be missing (returned 430)

Source

pub const fn missing_bits(&self) -> usize

Get the raw missing bitset for debugging

Source

pub fn all_exhausted(&self, backend_count: BackendCount) -> bool

Check if all backends in the pool have been tried and returned 430

Check if all backends have been tried and returned 430

Source

pub const fn has_availability_info(&self) -> bool

Check if we have any authoritative backend-missing information.

Returns true if at least one backend is known missing.

Source

pub fn status(&self, backend_id: BackendId) -> BackendStatus

Query backend availability status

Trait Implementations§

Source§

impl Clone for ArticleAvailability

Source§

fn clone(&self) -> ArticleAvailability

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for ArticleAvailability

Source§

impl Debug for ArticleAvailability

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ArticleAvailability

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for ArticleAvailability

Source§

impl PartialEq for ArticleAvailability

Source§

fn eq(&self, other: &ArticleAvailability) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ArticleAvailability

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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> 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> Scope for T

Source§

fn with<F, R>(self, f: F) -> R
where Self: Sized, F: FnOnce(Self) -> R,

Scoped with ownership.
Source§

fn with_ref<F, R>(&self, f: F) -> R
where F: FnOnce(&Self) -> R,

Scoped with reference.
Source§

fn with_mut<F, R>(&mut self, f: F) -> R
where F: FnOnce(&mut Self) -> R,

Scoped with mutable reference.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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> Value for T
where T: Send + Sync + 'static,

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