pub struct GrowthFacts {
pub kind: Option<DiskKind>,
pub is_pid1: bool,
pub grow: Option<Summary>,
pub runtime_engine: bool,
pub hotplug: bool,
}Expand description
What the machine says about the set under the data root. Two measured
facts and nothing inferred; decide_growth turns them into a verdict.
Fields§
§kind: Option<DiskKind>The mount and the array under it, as
crate::dashboard::probe::disk_kind reads them. None when the data
root is not a mount point of its own, or /proc/mounts is unreadable —
which is the honest UNKNOWN, not a growable answer.
is_pid1: boolThis process is PID 1. On the appliance gunnar IS init: there is no shell beside it, so nothing on the machine can grow a filesystem out of band. On a developer box or in a container beside an init this is false and an operator’s hands still exist.
grow: Option<Summary>The boot stack’s grow journal (/serialdat/grow-journal,
DATA-SET-GROWTH-DESIGN.md), when this box’s korp-start keeps one —
which is the measured fact that the boot stack CAN grow the set at a
restart. None on an image older than the engine, where the
appliance is as sealed as it ever was.
runtime_engine: boolThis gunnar-server links the runtime grow engine (crate::grow,
feature grow-runtime): with the journal on the box, the set grows
WITHOUT a restart through Admin.GrowStart. A build fact, read once.
hotplug: boolThe running kernel has PCI hot-plug
(crate::dashboard::probe::pci_hotplug). UpCloud resizes only
DETACHED volumes, so without it a member detached and re-attached while
gunnar runs is invisible: the engine is there, the growth is not.
Implementations§
Source§impl GrowthFacts
impl GrowthFacts
Sourcepub fn measure(root: &Path) -> GrowthFacts
pub fn measure(root: &Path) -> GrowthFacts
Read them off the running machine.
Trait Implementations§
Source§impl Clone for GrowthFacts
impl Clone for GrowthFacts
Source§impl Debug for GrowthFacts
impl Debug for GrowthFacts
impl Eq for GrowthFacts
Source§impl PartialEq for GrowthFacts
impl PartialEq for GrowthFacts
impl StructuralPartialEq for GrowthFacts
Auto Trait Implementations§
impl Freeze for GrowthFacts
impl RefUnwindSafe for GrowthFacts
impl Send for GrowthFacts
impl Sync for GrowthFacts
impl Unpin for GrowthFacts
impl UnsafeUnpin for GrowthFacts
impl UnwindSafe for GrowthFacts
Blanket Implementations§
impl<T> Allocation for T
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request