Skip to main content

MediatorReadinessConfig

Struct MediatorReadinessConfig 

Source
pub struct MediatorReadinessConfig {
    pub enabled: bool,
    pub retry_secs: u64,
    pub backoff_cap_secs: u64,
    pub max_wait_secs: u64,
    pub on_timeout: ReadinessTimeoutPolicy,
    pub reconnect: bool,
    pub reconnect_backoff_cap_secs: u64,
    pub reconnect_max_elapsed_secs: u64,
}
Expand description

Startup readiness gate for the mediator DIDComm connection.

On cold start a VTA can initiate its outbound mediator handshake before its own DID document is resolvable — the DID host hasn’t published it, or the load-balancer target fronting it isn’t healthy yet. The mediator authenticates the VTA by resolving that DID itself, so it can’t get the key to decrypt the authcrypt handshake and rejects it, producing a burst of 403s.

This gate makes the VTA wait until its own DID fully resolves over the network — through the configured resolver, so it exercises the same path the mediator takes — before connecting. Only network-resolved methods (did:webvh, did:web) are gated; a did:key VTA resolves from its own identifier with no network fetch and skips the wait.

Fields§

§enabled: bool

Enable the gate. Default true.

§retry_secs: u64

Base (initial) seconds between probe attempts. The actual wait uses capped exponential backoff with full jitter — attempt n sleeps a random duration in [0, min(backoff_cap_secs, retry_secs * 2^n)] — so a fleet of VTAs coming up together doesn’t probe in lock-step. Default 5.

§backoff_cap_secs: u64

Upper bound on the per-attempt backoff interval (the “cap” in the exponential-backoff-with-jitter scheme). The jittered wait never exceeds this. Default 30.

§max_wait_secs: u64

Maximum seconds the gate waits before applying on_timeout. The wait is cancellable: a shutdown signal abandons it immediately rather than holding the process open for the remainder. Default 300.

§on_timeout: ReadinessTimeoutPolicy

What to do when the gate times out. Default skip.

§reconnect: bool

Persistent reconnect supervisor. After the self-readiness gate passes, the mediator connect can still fail — most commonly because the mediator’s own resolver holds a negative-cache entry for the VTA host and can’t fetch our DID document to complete the authcrypt handshake (a NetworkError{status_code:None} → 403). That clears itself once the mediator’s negative cache expires, so rather than give up until the next restart, keep retrying with capped exponential backoff + full jitter. Each attempt first re-confirms the VTA can resolve its own DID, so the mediator is never touched while the VTA is unresolvable.

This also covers an established session whose inbound loop ends: the supervisor tears the session down and reconnects, instead of leaving the VTA silently deaf until an operator restarts it. Setting this false restores the legacy single-shot behaviour (one attempt, then nothing until the next restart). Default true.

§reconnect_backoff_cap_secs: u64

Upper bound on the reconnect backoff interval (seconds) — the “cap” for the persistent-reconnect scheme. The jittered retry wait never exceeds this. Larger than backoff_cap_secs (the gate’s cap) because the reconnect horizon must comfortably outlast a resolver negative-cache TTL, which can be many minutes. Default 60.

§reconnect_max_elapsed_secs: u64

Give up reconnecting after this many seconds of continuous failure. 0 = never give up (retry forever at the capped, jittered interval). A bounded retry rate is safe to run indefinitely and lets the VTA self-heal without any operator restart.

The clock is measured from the start of the current run of failures, not from process start, and resets after any session that stayed up long enough to count as healthy — so a VTA that ran for a week and then dropped gets the full budget rather than one it exhausted days ago. Default 0.

Trait Implementations§

Source§

impl Clone for MediatorReadinessConfig

Source§

fn clone(&self) -> MediatorReadinessConfig

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 MediatorReadinessConfig

Source§

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

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

impl Default for MediatorReadinessConfig

Source§

fn default() -> Self

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

impl<'de> Deserialize<'de> for MediatorReadinessConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for MediatorReadinessConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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<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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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> 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<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
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