pub struct RestoreStatus {
pub phase: Option<RestorePhase>,
pub source_kind: Option<String>,
pub observed_generation: Option<i64>,
pub resolved: Option<ResolvedRestore>,
pub target: Option<RestoreTargetStatus>,
pub timing: Option<RestoreTiming>,
pub wait_started_at: Option<String>,
pub progress: Option<RestoreProgress>,
pub conditions: Vec<Condition>,
pub log_tail: Option<String>,
pub failure: Option<FailureBlock>,
pub claims: BTreeMap<String, RestoreClaimStatus>,
}Expand description
Observed state of a Restore, written by the controller/mover.
Fields§
§phase: Option<RestorePhase>Current lifecycle phase.
source_kind: Option<String>The pinned source kind (SnapshotRef/FromPolicy/Identity); backs the SOURCE printer column.
observed_generation: Option<i64>metadata.generation last reconciled, so stale status is detectable.
resolved: Option<ResolvedRestore>The source resolved and pinned at admission; never re-resolved.
target: Option<RestoreTargetStatus>Resolved target details (the PVC written to / populator handshake).
timing: Option<RestoreTiming>Start/end timestamps for the restore run.
wait_started_at: Option<String>When the policy.waitTimeout window OPENED (RFC3339) — the first reconcile on which
the restore could actually proceed (its repository reached Ready, and for a
target.populator a PVC already claims it), NOT when the Restore was created. The
window does NOT open while the referenced Repository object or fromPolicy
SnapshotPolicy doesn’t exist: the restore parks in Pending
(ReferentAvailable=False, reason RestoreReferentMissing) and stays unstamped. It
DOES still open for a snapshotRef whose Snapshot row doesn’t exist yet (so
onMissingSnapshot can fire for a ref that never appears) and for a restore whose
mover Job already launched. Stamped once and then honored verbatim, so the window
survives controller restarts and Job pod retries; cleared when a populator re-opens
resolution for a re-created claim, so that claim gets the full window again. Absent
means the window has not opened yet (or no policy.waitTimeout is configured, in
which case there is no window to anchor).
progress: Option<RestoreProgress>Bytes/files restored so far, patched periodically by the mover.
conditions: Vec<Condition>Standard Kubernetes conditions carrying the human-readable status/reason.
log_tail: Option<String>The last lines of the run’s output, written by the mover at the terminal transition.
failure: Option<FailureBlock>Structured terminal-failure detail (kopia error class, stderr tail, retry hint).
claims: BTreeMap<String, RestoreClaimStatus>Per-claimant state for a target.populator restore, keyed by the claiming
PVC’s name (#443).
A populator Restore is claimed by EVERY PVC whose spec.dataSourceRef
names it, not just the first, and each claimant gets its own prime PVC, its
own mover Job and its own kopia source path — so each needs its own state.
A map, not a list, because an RFC-7386 merge patch merges map keys but
REPLACES arrays: N concurrent populate movers each patch only their own key
and can never clobber a sibling (the same reason as
SnapshotPolicyStatus.verificationStamps).
Absent for a direct target.pvc/target.pvcRef restore, which keeps using
the top-level resolved/target/waitStartedAt/logTail/failure.
The schema renders as an object with additionalProperties, which PRUNES
unknown keys — so every field any writer (controller or mover) puts under
claims.<pvc> must exist on RestoreClaimStatus.
Trait Implementations§
Source§impl Clone for RestoreStatus
impl Clone for RestoreStatus
Source§fn clone(&self) -> RestoreStatus
fn clone(&self) -> RestoreStatus
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 RestoreStatus
impl Debug for RestoreStatus
Source§impl Default for RestoreStatus
impl Default for RestoreStatus
Source§fn default() -> RestoreStatus
fn default() -> RestoreStatus
Source§impl<'de> Deserialize<'de> for RestoreStatus
impl<'de> Deserialize<'de> for RestoreStatus
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>,
Source§impl JsonSchema for RestoreStatus
impl JsonSchema for RestoreStatus
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 RestoreStatus
impl PartialEq for RestoreStatus
Source§fn eq(&self, other: &RestoreStatus) -> bool
fn eq(&self, other: &RestoreStatus) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for RestoreStatus
impl Serialize for RestoreStatus
impl StructuralPartialEq for RestoreStatus
Auto Trait Implementations§
impl Freeze for RestoreStatus
impl RefUnwindSafe for RestoreStatus
impl Send for RestoreStatus
impl Sync for RestoreStatus
impl Unpin for RestoreStatus
impl UnsafeUnpin for RestoreStatus
impl UnwindSafe for RestoreStatus
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<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