Skip to main content

Section

Struct Section 

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

One served application-and-profile pair.

Implementations§

Source§

impl Section

Source

pub fn application(&self) -> &str

The application this serves.

Source

pub fn profile(&self) -> &str

The profile this serves.

Source

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.

Source

pub fn generation(&self) -> u64

Installs since this section was created.

Source

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.

Source

pub fn status(&self) -> ConfigStatus

What is true of this section right now. No I/O.

Source

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”.

Source

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.

Source

pub fn reload(&self) -> Result<(), Error>

One reload: read the sources, install if they are good.

§Errors

Whatever the load reports. A failure installs nothing and is counted in status.

Source

pub fn sources(&self) -> Builder<Document>

This section’s sources, for the diagnostics that re-read them.

Cloned rather than borrowed because check and explain run on the blocking pool, which needs to own what it reads.

Trait Implementations§

Source§

impl Debug for Section

Keys and shape, never the document: a section holds resolved configuration and this type is the obvious thing to {:?} in a handler.

Source§

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

Formats the value using the given formatter. 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<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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.