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
impl FetchGroupOrders
Sourcepub fn record(&self, request_id: u64, order: AnyFetchGroupOrder)
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.
Sourcepub fn take(&self, request_id: u64) -> Option<AnyFetchGroupOrder>
pub fn take(&self, request_id: u64) -> Option<AnyFetchGroupOrder>
Take the order filed for request_id, if one was.