Skip to main content

JetStreamBackend

Struct JetStreamBackend 

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

A connected adapter for one team.

Implementations§

Source§

impl JetStreamBackend

Source

pub const NAME: &'static str = "jetstream"

Source

pub async fn connect(config: &Config, team_id: Uuid) -> BusResult<Self>

Connect and adopt the team’s stream. Does not create it: that is provision, an operator action with a different credential.

Source

pub async fn provision(config: &Config, team_id: Uuid) -> BusResult<Provisioned>

Create a team’s body stream, or find it. Operator action: run with the provisioning credential, not the one the server runs with.

An existing stream keeps its limits, whatever config asks for: a routine retry must never shrink or grow a quota on the quiet. Provisioned::created and Provisioned::differs_from tell the caller what happened, and Self::update_quotas is the explicit way to change them.

Source

pub async fn provision_inbox( config: &Config, team_id: Uuid, ) -> BusResult<Provisioned>

Create or find a team’s inbox stream. Same operator action and same credential as provision; separate so a deployment can see what each stream costs.

Source

pub async fn check_update( config: &Config, team_id: Uuid, kind: StreamKind, ) -> BusResult<QuotaChange>

What changing a stream’s quotas would do, without doing it: the limits it has now (what a rollback restores), what it holds, and the extra bytes the broker would have to reserve. Refused when the stream already holds more than the new ceiling would allow, since a ceiling below the current contents would make the next write fail (bodies) or start dropping (references) at once.

Source

pub async fn update_quotas( config: &Config, team_id: Uuid, kind: StreamKind, ) -> BusResult<Provisioned>

Change an existing stream’s quotas to what config asks for: the explicit counterpart of the retry that keeps them. Runs Self::check_update first. The check is a snapshot: a publisher can add to the stream between it and the update, so the outcome carries the contents read back afterwards and the caller says so when they exceed the new ceiling. Neither stream loses data to that race: the body stream discards new writes when full, and an inbox reference the broker drops is rebuilt from Postgres, which is its authority.

Source

pub async fn apply_update( config: &Config, team_id: Uuid, kind: StreamKind, change: &QuotaChange, ) -> BusResult<Provisioned>

Apply a change that Self::check_update already vetted.

Source

pub async fn storage_account(config: &Config) -> BusResult<StorageAccount>

The broker’s storage account as it stands: bytes used, bytes reserved by every stream’s max_bytes, and the store’s budget (None when the account is unlimited). Lets a caller refuse a change that could not be reserved before touching anything.

Source

pub async fn publish_reference( &self, recipient_key: &str, event_id: Uuid, payload: &str, ) -> Published

Publish one reference to a recipient’s own subject.

Deduplicated on the event id, so a retry of the same reference is the same notification rather than a second one.

Source

pub async fn fetch_references( &self, recipient_key: &str, limit: usize, ) -> BusResult<Vec<InboxRef>>

Take up to limit references without acknowledging any of them. Acknowledgement happens only once the receipt is committed.

Source

pub async fn ack_reference(&self, ack_subject: &str) -> BusResult<()>

Acknowledge one reference by the subject it was offered on. Sent after the receipt has been committed, never before.

Source

pub async fn inbox_status(&self, recipient_key: &str) -> BusResult<InboxStatus>

What this recipient’s consumer holds. A missing consumer is a fact, not an empty inbox.

Source

pub async fn deprovision(config: &Config, team_id: Uuid) -> BusResult<()>

Remove a team’s stream. Operator action, and a destructive one: it drops every body the stream holds.

Source

pub fn stream(&self) -> &str

Source

pub async fn reachable(config: &Config) -> bool

Can this process reach the broker at all? For health checks, which is why it opens and drops a connection rather than reusing a team’s: it answers a question about the deployment, not about a stream.

Trait Implementations§

Source§

impl Clone for JetStreamBackend

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
Source§

impl MessagingBackend for JetStreamBackend

Source§

fn name(&self) -> &'static str

Name recorded on the conversation and the outbox row.
Source§

async fn publish(&self, envelope: Envelope) -> Published

Persist a body. Must be idempotent on publish_key: presented the same key twice, it returns the same locator rather than storing twice.
Source§

async fn fetch( &self, locator: &Locator, message_id: Uuid, ) -> BusResult<Option<String>>

Read a body back by locator, for history. Read more
Source§

async fn retain(&self, _before: DateTime<Utc>) -> BusResult<u64>

Drop a body the retention policy no longer keeps. Returns how many were removed.
Source§

async fn reconcile(&self, envelope: &Envelope) -> BusResult<Option<Locator>>

Settle an attempt that ended without an answer. 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> 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<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

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> 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 = !

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