Skip to main content

DiskHeadroomGate

Struct DiskHeadroomGate 

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

The community gate. verdict is always Allow — this gate knows no plan; pack_quota refuses when the store root is under the floor, or when everything above the floor is already promised to transfers still landing.

It owns the data set’s SpaceLedger (crate::space): the same floor and the same measurement, so the door before the first byte and the receive loop after it cannot disagree about where the line is. gunnar serve hands Self::ledger to every door that writes.

Implementations§

Source§

impl DiskHeadroomGate

Source

pub fn new(root: impl Into<PathBuf>, floor: DiskFloor) -> Self

Guard the filesystem root lives on. root is the store root (/data on the appliance); the measurement is of its filesystem, so a path anywhere on the same mount reads the same.

Source

pub fn over(ledger: Arc<SpaceLedger>) -> Self

The gate over an existing ledger — its root, its floor, its probe (a test’s fake disk measures through here too).

Source

pub fn ledger(&self) -> &Arc<SpaceLedger> ⓘ

The data set’s space ledger: what every writing door asks before each chunk it takes.

Source

pub fn root(&self) -> &Path

The path this gate measures.

Source

pub fn floor(&self) -> DiskFloor

The floor this gate was configured with.

Source

pub fn headroom(&self) -> Result<Headroom>

Measure. One statvfs (the ledger’s probe); the error is the OS’s.

The RAW reading — what is on the disk, no promises subtracted. This is what Admin.Capacity reports and monetize’s growth trigger reads (used = total − servable): a promise is not a byte used, and a refused burst must not read as a full set (see crate::space).

Source

pub fn refusal(&self) -> Option<String>

The one refusal, for every door. None is room; Some(line) is what the client is told, naming the free bytes and the floor. A measurement that fails is a refusal that says so.

Two lines, and the difference is the point: UNDER the floor is the floor’s line (final until space is reclaimed or grown); above it but with everything above it promised to transfers still landing is crate::space::FULL_NOW’s (try again in a moment).

Trait Implementations§

Source§

impl Clone for DiskHeadroomGate

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 Debug for DiskHeadroomGate

Source§

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

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

impl PlanGate for DiskHeadroomGate

Source§

fn verdict(&self, _namespace: &str, _action: PlanAction) -> PlanVerdict

The ladder’s answer for namespace and action. An unknown namespace is Free, which is Allow.
Source§

fn pack_quota(&self, _namespace: &str) -> PlanVerdict

Is the namespace already at its caps["pack_bytes"]? Refuse names the cap, what is held and the URL; Allow for a namespace with no cap or room under it. Asked before a single pack byte is read, so a tenant at the ceiling learns it from the first line and not after the upload.
Source§

fn applies_to_machine(&self) -> bool

Does this gate also bind the primary’s replication push? A Machine principal is how a primary authenticates to its standby, and by default a gate is NOT asked about it: replication is the primary’s copy arriving, not a tenant growing their data, and a plan that refused it would make a lapsed tenant’s standby diverge from the primary. The disk gate answers true: a full standby must say so before the bytes, the same as a full primary — there is no plan to exempt a disk from.
Source§

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

How this gate names itself in Control’s Debug and in the boot log.
Source§

fn pack_ceiling(&self, _namespace: &str) -> Option<PackCeiling>

How many packfile bytes may this namespace still receive, right now? None — the default, and every gate’s answer until one has a reason — means no ceiling, and the pack is read to its end whatever its size. Read more
Source§

fn lfs_allowance(&self, _namespace: &str) -> Option<Allowance>

How many LFS bytes may this namespace still receive? The same question PlanGate::pack_ceiling asks about a pack, one wire over, and None means the same thing: no cap, take what arrives. 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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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