Skip to main content

FetchGroupOrders

Struct FetchGroupOrders 

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

Every fetch this session has learned a Group Order for, keyed by the Request ID that names it on both the control plane and the data stream.

§Why a fetch stream needs something from outside itself

Drafts 18 and 19 write a fetch Object’s Group ID as a difference from the Object before it, and the fetch’s Group Order decides whether the difference counts up or down — draft-19 Section 11.4.4.1. Nothing on the data stream states the order, so a framer handed only the stream cannot reach an absolute Group ID, and the wrong choice decodes every Object without an error under Group IDs walking the wrong way.

The order is on the FETCH. Draft-19 Section 10.12.3: “The publisher responding to a FETCH is responsible for delivering all available Objects in the requested range in the requested order (see Section 10.2.8).” The session’s control pipes read it off each FETCH they carry and file it here; ObjectFramer takes it out again when the response stream opens.

§Why an entry is taken rather than read

One FETCH opens one response stream, so an entry has exactly one reader and is spent by it. Taking bounds the table to the fetches that have been asked for and not yet answered, on a session that may run for hours, and it needs no rule about when to forget: the reader is the rule.

What that leaves is a fetch the publisher answered with an error rather than a stream, whose entry no reader ever comes for. A cap is the bound on those, and it fails closed — past it nothing is recorded, so the affected streams are bypassed and say so rather than being read against somebody else’s order.

Implementations§

Source§

impl FetchGroupOrders

Source

pub fn record(&self, request_id: u64, order: AnyFetchGroupOrder)

File the order a FETCH asked for, under the Request ID it asked under.

Call with the order the peer will act on, which on a session whose control frames a hook may rewrite is the one leaving the proxy rather than the one that arrived.

Source

pub fn take(&self, request_id: u64) -> Option<AnyFetchGroupOrder>

Take the order filed for request_id, if one was.

Trait Implementations§

Source§

impl Debug for FetchGroupOrders

Source§

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

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

impl Default for FetchGroupOrders

Source§

fn default() -> FetchGroupOrders

Returns the “default value” for a type. 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<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, 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<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