pub enum RestoreClaimPhase {
Pending,
Populating,
Rebinding,
Populated,
AlreadyBound,
Failed,
Unknown(String),
}Expand description
Lifecycle phase of ONE claiming PVC of a populator Restore (#443).
Deliberately a separate closed enum from RestorePhase: a claim has states
the Restore does not (Rebinding, AlreadyBound), and the Restore-level
phase is the AGGREGATE over these. Named *Phase on purpose, so
cargo xtask check-phases polices every branch on it.
use kopiur_api::RestoreClaimPhase;
assert_eq!(serde_json::to_value(RestoreClaimPhase::Populating).unwrap(), "Populating");
// An unrecognized phase from a newer operator decodes instead of erroring.
let p: RestoreClaimPhase = serde_json::from_value(serde_json::json!("Staging")).unwrap();
assert_eq!(p, RestoreClaimPhase::Unknown("Staging".into()));
assert_eq!(serde_json::to_value(&p).unwrap(), "Staging");
assert!(!p.is_terminal());Variants§
Pending
Observed, but nothing has run for it yet — waiting on a scheduling hint
(WaitForFirstConsumer), on the repository, or on the source snapshot.
Populating
A mover Job is writing this claim’s prime PVC.
Rebinding
The prime volume is written and its PersistentVolume was rebound to the
claim; waiting for the PV controller to complete the bind.
Populated
The claim is bound to the volume this restore populated. Terminal.
AlreadyBound
The claim was ALREADY bound when first observed, so there was nothing to populate — a CSI volume-populator only fills an UNBOUND claim. A truthful terminal no-op (#233): no prime PVC, no mover run.
Failed
This claim terminally failed; reason/message say why. Terminal for the
CLAIM only — siblings keep going, and re-creating this claiming PVC
re-arms it.
Unknown(String)
A phase string this build does not recognize (newer operator, or legacy stored data). Decode-compat only — hidden from the CRD schema, never produced by this build, never terminal.
Implementations§
Source§impl RestoreClaimPhase
impl RestoreClaimPhase
Sourcepub fn is_terminal(&self) -> bool
pub fn is_terminal(&self) -> bool
Whether this claim reached an end state and the operator will do no further work on it of its own accord.
Failed IS terminal here, and that is what lets the fan-out stop
short-circuiting the WHOLE Restore on Failed: the failure is scoped to
this claim, its siblings keep going, and what re-arms it is deleting and
re-creating the claiming PVC (which mints a new uid, hence a new record) —
never a re-drive of the old one.
Pure + exhaustive, so the single definition lives in one tested place.
use kopiur_api::RestoreClaimPhase;
assert!(RestoreClaimPhase::Populated.is_terminal());
assert!(RestoreClaimPhase::AlreadyBound.is_terminal());
assert!(RestoreClaimPhase::Failed.is_terminal());
assert!(!RestoreClaimPhase::Pending.is_terminal());
assert!(!RestoreClaimPhase::Populating.is_terminal());
assert!(!RestoreClaimPhase::Rebinding.is_terminal());
assert!(!RestoreClaimPhase::Unknown("Staging".into()).is_terminal());Sourcepub fn is_unknown(&self) -> bool
pub fn is_unknown(&self) -> bool
Whether this phase is the decode sentinel — a value the running build
cannot interpret, kept verbatim by Unknown instead of
failing the whole typed list()/watch for the Kind.
use kopiur_api::RestoreClaimPhase;
assert!(RestoreClaimPhase::Unknown("Staging".into()).is_unknown());
assert!(!RestoreClaimPhase::Populated.is_unknown());Trait Implementations§
Source§impl Clone for RestoreClaimPhase
impl Clone for RestoreClaimPhase
Source§fn clone(&self) -> RestoreClaimPhase
fn clone(&self) -> RestoreClaimPhase
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 RestoreClaimPhase
impl Debug for RestoreClaimPhase
Source§impl Default for RestoreClaimPhase
impl Default for RestoreClaimPhase
Source§fn default() -> RestoreClaimPhase
fn default() -> RestoreClaimPhase
Source§impl<'de> Deserialize<'de> for RestoreClaimPhase
impl<'de> Deserialize<'de> for RestoreClaimPhase
Source§fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error>
impl Eq for RestoreClaimPhase
Source§impl JsonSchema for RestoreClaimPhase
impl JsonSchema for RestoreClaimPhase
Source§fn json_schema(_: &mut SchemaGenerator) -> Schema
fn json_schema(_: &mut SchemaGenerator) -> Schema
§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for RestoreClaimPhase
impl PartialEq for RestoreClaimPhase
Source§fn eq(&self, other: &RestoreClaimPhase) -> bool
fn eq(&self, other: &RestoreClaimPhase) -> bool
self and other values to be equal, and is used by ==.Source§impl PhaseLabel for RestoreClaimPhase
impl PhaseLabel for RestoreClaimPhase
Source§const ALL: &'static [Self]
const ALL: &'static [Self]
Unknown.Source§fn label(&self) -> &str
fn label(&self) -> &str
match); the Unknown arm echoes the stored value verbatim so a
read-modify-write never mutates a phase this build does not understand.Source§fn unknown(raw: String) -> Self
fn unknown(raw: String) -> Self
phase_serde! macro’s host enum.Source§impl Serialize for RestoreClaimPhase
impl Serialize for RestoreClaimPhase
impl StructuralPartialEq for RestoreClaimPhase
Auto Trait Implementations§
impl Freeze for RestoreClaimPhase
impl RefUnwindSafe for RestoreClaimPhase
impl Send for RestoreClaimPhase
impl Sync for RestoreClaimPhase
impl Unpin for RestoreClaimPhase
impl UnsafeUnpin for RestoreClaimPhase
impl UnwindSafe for RestoreClaimPhase
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