Skip to main content

IntentMachine

Struct IntentMachine 

Source
pub struct IntentMachine {
    pub store: ClientStore,
    pub attempts: u32,
    pub backoff_ms: Vec<u64>,
}

Fields§

§store: ClientStore§attempts: u32§backoff_ms: Vec<u64>

Implementations§

Source§

impl IntentMachine

Source

pub fn new(store: ClientStore, attempts: u32, backoff_ms: Vec<u64>) -> Self

Source

pub fn enqueue(&self, envelope: &Envelope) -> Result<bool>

Queue one envelope under the id its row is keyed by.

A kind that may arrive without a key (a note) gets a fresh one from stamp_op_id, and the stamped envelope is what the row stores and replays, so the row’s op_id and its env_json never disagree.

Source

pub fn enqueue_value(&self, op_id: &str, envelope: &Value) -> Result<bool>

Source

pub fn pending(&self) -> Result<Vec<IntentRow>>

The rows this pass may send: due, oldest deadline first, one batch.

Not the whole queue — ClientStore::flush_order bounds what is due and how many rows one pass takes, and a row still inside its backoff is asked for again on the pass its deadline arrives.

Source

pub fn next_delay(&self, attempt: u32) -> Duration

Source

pub fn fail_local(&self, row: &IntentRow, reason: &str) -> Result<IntentResult>

Count one pass in which this process could not act on a row at all.

A payload that no longer decodes will not decode on a later pass, and a row left at its old deadline holds the head of the flush batch forever: every pass spends a slot on a frame that can never be built, and behind a batch cap that slot is one the queue’s oldest sendable row did not get. Charging the pass retires the row at MAX_LOCAL_FAILURES the way a refused row retires at attempts — exhausted, with the fault that names the reason — and the backoff meanwhile takes it out of the due window, so the head moves on the same pass.

A transport failure is not this path: the link being down says nothing about the row, so IntentMachine::defer keeps its budget intact and the reconnect flushes it (plan §6 line 289).

Source

pub fn attempt( &self, row: &IntentRow, response: Option<&ResBody>, ) -> Result<IntentResult>

Source

pub fn defer(&self, row: &IntentRow, reason: &str) -> Result<IntentResult>

Hold an intent whose send never reached the server.

The link being down says nothing about the message, so the queue keeps the row and the attempt counter stays where it was (plan §6 line 289).

Trait Implementations§

Source§

impl Clone for IntentMachine

Source§

fn clone(&self) -> Self

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

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

Source§

fn try_clone(&self) -> Result<T, Error>

Clones self, possibly returning an error.
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, !>

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