pub enum ReplicationManualRunPhase {
Pending,
Running,
Succeeded,
Failed,
Unknown(String),
}Expand description
Lifecycle of an annotation-requested (on-demand) replication run, shared by
RepositoryReplication and SnapshotReplication.
Closed on the wire, open on decode — the same contract every kopiur
phase carries (see the phase_serde! macro): the CRD schema admits exactly
Pending/Running/Succeeded/Failed, and Self::Unknown exists only
so a value written by a NEWER kopiur decodes instead of failing the typed
watch for the whole Kind.
It has a Pending variant that crate::ManualRunPhase does not: a
replication can be suspend: true when the request lands, and a request
that cannot start yet must be VISIBLE rather than silently queued.
use kopiur_api::common::ReplicationManualRunPhase;
assert_eq!(serde_json::to_value(ReplicationManualRunPhase::Pending).unwrap(), "Pending");
// An unrecognized phase from a newer operator decodes instead of erroring.
let p: ReplicationManualRunPhase = serde_json::from_value(serde_json::json!("Queued")).unwrap();
assert_eq!(p, ReplicationManualRunPhase::Unknown("Queued".into()));
assert_eq!(serde_json::to_value(&p).unwrap(), "Queued");Variants§
Pending
The request is recorded but no Job can start yet (the replication is
suspend: true); it runs when the block clears.
Running
The mover Job for this request is in flight.
Succeeded
The requested run completed successfully.
Failed
The requested run’s Job failed; conditions carry the detail.
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 counted as a finished run, so a re-run request is never deduped against it.
Implementations§
Source§impl ReplicationManualRunPhase
impl ReplicationManualRunPhase
Sourcepub fn is_unknown(&self) -> bool
pub fn is_unknown(&self) -> bool
Whether this is the decode-compat Self::Unknown sentinel. The
exhaustive match lives here so a variant added later cannot be
silently classified by an if let … Unknown(_) probe elsewhere.
Sourcepub fn implies_job_launched(&self) -> bool
pub fn implies_job_launched(&self) -> bool
Whether this phase says a mover Job for the request EXISTS OR EXISTED.
The controller’s “the Job vanished before its outcome was observed”
check: Running with no Job present means a TTL reap beat the
reconcile, and re-running side-effectful work silently would be worse
than reporting the lost outcome. Exhaustive rather than an equality so a
phase added later must state whether it implies a Job was launched —
under == the new variant would silently take the “no Job ever ran”
branch.
Sourcepub fn answers_request(&self) -> bool
pub fn answers_request(&self) -> bool
Whether this phase ANSWERS the request it is recorded against — i.e. the
run reached a terminal outcome, so re-applying the same run-requested
value is a no-op.
Exhaustive on purpose: this predicate decides whether a user’s run
request is DROPPED, so a new phase must state whether it counts as an
answer. Unknown is deliberately NOT an answer — re-driving is
idempotent (the Job name is keyed on the request timestamp), whereas
dropping the request loses the run.
Trait Implementations§
Source§impl Clone for ReplicationManualRunPhase
impl Clone for ReplicationManualRunPhase
Source§fn clone(&self) -> ReplicationManualRunPhase
fn clone(&self) -> ReplicationManualRunPhase
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 ReplicationManualRunPhase
impl Debug for ReplicationManualRunPhase
Source§impl<'de> Deserialize<'de> for ReplicationManualRunPhase
impl<'de> Deserialize<'de> for ReplicationManualRunPhase
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 ReplicationManualRunPhase
Source§impl JsonSchema for ReplicationManualRunPhase
impl JsonSchema for ReplicationManualRunPhase
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 ReplicationManualRunPhase
impl PartialEq for ReplicationManualRunPhase
Source§fn eq(&self, other: &ReplicationManualRunPhase) -> bool
fn eq(&self, other: &ReplicationManualRunPhase) -> bool
self and other values to be equal, and is used by ==.Source§impl PhaseLabel for ReplicationManualRunPhase
impl PhaseLabel for ReplicationManualRunPhase
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.impl StructuralPartialEq for ReplicationManualRunPhase
Auto Trait Implementations§
impl Freeze for ReplicationManualRunPhase
impl RefUnwindSafe for ReplicationManualRunPhase
impl Send for ReplicationManualRunPhase
impl Sync for ReplicationManualRunPhase
impl Unpin for ReplicationManualRunPhase
impl UnsafeUnpin for ReplicationManualRunPhase
impl UnwindSafe for ReplicationManualRunPhase
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