Skip to main content

ResilienceService

Struct ResilienceService 

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

Indexing-layer manager for leases, health, jitter, and repair fetches.

Implementations§

Source§

impl ResilienceService

Source

pub fn new(config: ResilienceConfig) -> Self

Create a resilience service from explicit configuration.

Source

pub fn with_database( database: IndexingDatabase, config: ResilienceConfig, ) -> Self

Create a resilience service backed by an indexing database.

Active leases and bans are hydrated from the database on construction. Mutations are persisted through the database on every operation.

Source

pub fn with_budget(budget: ReplicationBudget) -> Self

Create a resilience service using a replication budget.

Source

pub fn with_wot(config: ResilienceConfig, wot: WotService) -> Self

Create a resilience service which filters providers through local WoT.

Source

pub fn with_reputation( config: ResilienceConfig, reputation_config: ReputationConfig, wot: Option<WotService>, ) -> Self

Create a service with explicit reputation and WoT policy state.

Source

pub const fn config(&self) -> &ResilienceConfig

Source

pub fn reputation_store(&self) -> Arc<Mutex<ProviderReputationStore>> ⓘ

Return the shared historical provider reputation store.

Source

pub fn with_trust_policy(self, wot: WotService) -> Self

Replace the local WoT service used for provider filtering.

Source

pub fn record_lease(&self, lease: &ProviderLease) -> Result<LeaseUpdate>

Track a verified lease and wake pending fetches when it is new.

§Errors

Returns an error if the lease is invalid or the service state lock is poisoned.

Source

pub fn track_lease(&self, lease: &ProviderLease) -> Result<LeaseUpdate>

Alias for Self::record_lease.

§Errors

Returns an error if the lease is invalid or the service state lock is poisoned.

Source

pub fn ingest_lease(&self, lease: &ProviderLease) -> Result<LeaseUpdate>

Alias for Self::record_lease.

§Errors

Returns an error if the lease is invalid or the service state lock is poisoned.

Source

pub fn invalidate_provider( &self, hash: Hash, provider: PublicKey, ) -> Result<bool>

Invalidate a provider’s lease and cancel pending fetches for its blob.

§Errors

Returns an error if the provider lease tracker or generation state is poisoned.

Source

pub fn ban_provider( &self, provider: PublicKey, reason: impl Into<String>, scope: Option<Hash>, duration: Option<Duration>, ) -> Result<BanRecord>

Add a manual global or hash-scoped provider ban.

§Errors

Returns an error if provider state or generation state is poisoned.

Source

pub fn unban_provider( &self, provider: PublicKey, scope: Option<Hash>, ) -> Result<bool>

Remove a manual global or hash-scoped provider ban.

§Errors

Returns an error if provider state or generation state is poisoned.

Source

pub fn retroactive_invalidate( &self, hash: Hash, successful_provider: PublicKey, ) -> Result<Vec<PublicKey>>

Retroactively invalidate providers that definitively failed after a successful fetch.

§Errors

Returns an error if provider state or generation state is poisoned.

Source

pub fn observe_provider(&self, hash: Hash, provider: PublicKey) -> Result<()>

Record a locally observed provider.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn health(&self, hash: &Hash) -> Result<AvailabilityHealth>

Return the current health report for a blob.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn health_batch( &self, hashes: &[Hash], ) -> Result<HashMap<Hash, AvailabilityHealth>>

Query health for many hashes at once using a reverse index.

This is O(n + m) where n = total provider leases and m = queried hashes, instead of O(n * m) for calling health() per hash.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn needs_replication(&self, hash: &Hash) -> Result<bool>

Return whether a blob is below the configured verified lease budget.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn responsible_providers(&self, hash: &Hash) -> Result<Vec<PublicKey>>

Return the closest active providers selected by consistent hashing.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn list_providers(&self) -> Result<Vec<PublicKey>>

Return all providers with active leases across all blobs.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn blobs_for_provider(&self, provider: &PublicKey) -> Result<Vec<Hash>>

Return all blob hashes that the given provider has an active lease for.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn record_failure( &self, hash: Hash, provider: PublicKey, failure: FetchFailure, ) -> Result<()>

Record a fetch failure in the shared provider tracker.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn record_failure_at( &self, hash: Hash, provider: PublicKey, failure: FetchFailure, now: u64, ) -> Result<()>

Record a fetch failure at an explicit time.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn clear_failures_for_provider( &self, hash: &Hash, provider: &PublicKey, ) -> Result<()>

Clear a provider’s recorded failures after a successful fetch.

§Errors

Returns an error if the service state lock is poisoned.

Source

pub fn record_success(&self, hash: &Hash, provider: &PublicKey) -> Result<()>

Record a successful provider fetch and clear its transient failure history.

§Errors

Returns an error if provider state is poisoned.

Source

pub fn reputation_score(&self, provider: PublicKey) -> Result<f64>

Return the current historical score for a provider.

§Errors

Returns an error if provider state is poisoned.

Source

pub fn jitter_delay(&self, hash: Hash, provider: PublicKey) -> Duration

Return the deterministic jitter assigned to one provider.

Source

pub async fn wait_for_fetch_slot( &self, hash: Hash, provider: PublicKey, ) -> Result<FetchWait>

Wait for a provider’s jitter slot, cancelling when a newer lease is observed for the same blob.

§Errors

Returns an error if service state cannot be accessed.

Source

pub async fn ensure_replication( &self, endpoint: &Endpoint, blobs: &BlobStore, hash: Hash, ) -> Result<ReplicationResult>

Fetch and pin a blob when its verified availability is below budget.

Providers are tried in consistent-hash order and each fetch is delayed by its provider-specific jitter. A newly accepted lease short-circuits the pending fetch instead of creating a thundering herd.

§Errors

Returns an error if state cannot be read, a selected provider ticket is invalid, or pinning fails. Provider fetch failures are returned in ReplicationResult::failed_from so another provider can be tried.

Source

pub async fn replicate( &self, endpoint: &Endpoint, blobs: &BlobStore, hash: Hash, ) -> Result<ReplicationResult>

Alias for Self::ensure_replication.

§Errors

Returns an error if the repair fetch fails.

Source

pub async fn subscribe( &self, gossip: &GossipService, bootstrap: Vec<PublicKey>, ) -> Result<GossipTopic>

Subscribe to the provider-lease gossip topic.

§Errors

Returns an error if the gossip subscription cannot be created.

Source

pub async fn announce( &self, gossip: &GossipService, sender: &GossipSender, lease: &ProviderLease, ) -> Result<()>

Publish a signed provider lease to gossip.

§Errors

Returns an error if the lease is unsigned, invalid, or cannot be sent.

Source

pub async fn consume_gossip( &self, topic: &mut GossipTopic, timeout: Duration, ) -> Result<usize>

Consume provider leases until the topic closes or timeout expires.

A timeout is a normal end condition because gossip has no finite response boundary.

§Errors

Returns an error if a gossip event or lease is malformed.

Source

pub fn spawn_gossip_listener( &self, topic: GossipTopic, ) -> JoinHandle<Result<usize>>

Spawn a background provider-lease gossip consumer.

Trait Implementations§

Source§

impl Clone for ResilienceService

Source§

fn clone(&self) -> ResilienceService

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 Debug for ResilienceService

Source§

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

Formats the value using the given formatter. Read more

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

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