pub struct StorageStats {
pub snapshot_count: Option<i64>,
pub total_size: Option<String>,
pub total_size_bytes: Option<i64>,
pub last_observed_at: Option<String>,
pub index_blob_count: Option<i64>,
pub index_blob_count_at: Option<String>,
}Expand description
Aggregate repository storage figures from the last catalog scan.
Fields§
§snapshot_count: Option<i64>Total COMPLETE snapshots present in the repository (across all
identities). Incomplete checkpoints an interrupted kopia snapshot create left behind are not snapshots and are not counted.
total_size: Option<String>Human-readable total on-disk size (e.g. 412Gi).
total_size_bytes: Option<i64>Logical bytes under management (the integer form of total_size): the sum,
over each distinct snapshot source, of the most-recent snapshot’s logical
size. Exposed to backup preflight as repository.sizeBytes. This is
repository total size, not backend free space (object stores don’t report
remaining capacity).
last_observed_at: Option<String>RFC 3339 timestamp these stats were last observed.
index_blob_count: Option<i64>Number of content-index blobs (kopia index list): the freshest count
available, from either the last bootstrap or the recount a maintenance
run takes right after compacting. indexBlobCountAt says when.
index_blob_count_at: Option<String>RFC3339 instant indexBlobCount was observed.
Distinct from lastObservedAt (the catalog scan’s timestamp) and from
status.health.lastProbeAt (the backend probe’s): the index-blob count
has its own writers, and this is what lets the reconciler decide whether
a post-maintenance recount is fresher than the bootstrap’s own count.
Without it the two observations were incomparable, so the
IndexBlobHealth warning could only ever quote the bootstrap figure —
which is pre-compaction, and stayed pre-compaction until the next
bootstrap ran (#458).
The two writers mean subtly different things, deliberately. A bootstrap stamps “when this count was FIRST seen at this value”, reusing the previous stamp while the number is unchanged — that arm re-observes on every reconcile, and a stamp that always moved would make the status always-changed and the reconcile a hot loop. A post-maintenance recount always carries its own instant, because it is a distinct observation taken at a known time and its whole purpose is to be comparable.
Trait Implementations§
Source§impl Clone for StorageStats
impl Clone for StorageStats
Source§fn clone(&self) -> StorageStats
fn clone(&self) -> StorageStats
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for StorageStats
impl Debug for StorageStats
Source§impl Default for StorageStats
impl Default for StorageStats
Source§fn default() -> StorageStats
fn default() -> StorageStats
Source§impl<'de> Deserialize<'de> for StorageStats
impl<'de> Deserialize<'de> for StorageStats
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for StorageStats
Source§impl JsonSchema for StorageStats
impl JsonSchema for StorageStats
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for StorageStats
impl PartialEq for StorageStats
Source§fn eq(&self, other: &StorageStats) -> bool
fn eq(&self, other: &StorageStats) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for StorageStats
impl Serialize for StorageStats
impl StructuralPartialEq for StorageStats
Auto Trait Implementations§
impl Freeze for StorageStats
impl RefUnwindSafe for StorageStats
impl Send for StorageStats
impl Sync for StorageStats
impl Unpin for StorageStats
impl UnsafeUnpin for StorageStats
impl UnwindSafe for StorageStats
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more