pub struct Section { /* private fields */ }Expand description
One served application-and-profile pair.
Implementations§
Source§impl Section
impl Section
Sourcepub fn application(&self) -> &str
pub fn application(&self) -> &str
The application this serves.
Sourcepub fn current(&self) -> Option<Arc<Document>>
pub fn current(&self) -> Option<Arc<Document>>
The document currently serving, or None before the first install.
One atomic load. A handler takes it once and reuses the Arc, so a
reload landing mid-request cannot show one response two generations.
Sourcepub fn generation(&self) -> u64
pub fn generation(&self) -> u64
Installs since this section was created.
Sourcepub fn installed(&self) -> Option<(u64, Arc<Document>)>
pub fn installed(&self) -> Option<(u64, Arc<Document>)>
The serving document together with a generation that is never ahead of it.
Two atomic loads, and their order is the whole point.
ConfigCell publishes a snapshot’s
metadata after the snapshot itself — deliberately, so that reading
configuration stays one load with nothing to project out of it — so
a generation read first may lag the document and can never lead it.
Reading the document first inverts that, and the inversion is the harmful direction: a reload landing between the two loads would send the previous document under the new number, and a client that records it — or resumes its change stream with it — has been told it consumed an update whose contents it never received. This way round, the worst case is a response labelled one install behind its own contents: the client is told about that install again and fetches once more, which costs a round trip and loses nothing.
Sourcepub fn status(&self) -> ConfigStatus
pub fn status(&self) -> ConfigStatus
What is true of this section right now. No I/O.
Sourcepub fn is_ready(&self) -> bool
pub fn is_ready(&self) -> bool
Whether this section can be served.
A section is ready when it has a document and the last reload installed one. The second half is the point of fronting a store: a bad edit upstream leaves the previous document serving — callers see no outage — and says so here, so a deployment pipeline notices before the next restart turns “stale but working” into “will not start”.
Sourcepub fn changes(&self) -> Changes<Document>
pub fn changes(&self) -> Changes<Document>
A handle woken by every later install of this section.
What the change stream awaits. It costs one Arc clone and a u64
— no document, no diff, no queue — which is what lets a connection
per pod be an ordinary number rather than a memory bound.