pub enum RestartStrategy {
OneForOne,
OneForAll,
RestForOne,
SimpleOneForOne,
}Expand description
One of the four canonical Erlang/OTP restart strategies.
The strategy decides what happens to sibling children when one
child dies. Per-child behaviour is governed by RestartPolicy.
Variants§
OneForOne
On child failure, restart only that child. Default; matches most “tree of independent workers” use cases.
OneForAll
On child failure, restart every child. Used when children share state and must be in sync.
RestForOne
On child failure, restart the failed child and every child started after it (preserving startup order). Used when later children depend on earlier ones.
SimpleOneForOne
Dynamic children of the same shape, started on demand. The supervisor doesn’t know its children at boot; they’re added as they’re needed (e.g. one child per session).
Implementations§
Source§impl RestartStrategy
impl RestartStrategy
Sourcepub const fn discriminant(&self) -> &'static str
pub const fn discriminant(&self) -> &'static str
Stable variant discriminant — auto-generated by
#[derive(Discriminant)]. The string IS the wire
identifier for metrics labels / audit-log tags /
rate-limit keys; renaming an existing variant is a
breaking change.
Source§impl RestartStrategy
impl RestartStrategy
pub const fn is_one_for_one(&self) -> bool
pub const fn is_one_for_all(&self) -> bool
pub const fn is_rest_for_one(&self) -> bool
pub const fn is_simple_one_for_one(&self) -> bool
Source§impl RestartStrategy
impl RestartStrategy
Sourcepub const fn as_str(self) -> &'static str
pub const fn as_str(self) -> &'static str
Canonical PascalCase discriminator scalar this variant serializes
as under crate::render::SUPERVISOR_KEY_ESTRATEGIA. The four arms
return the paired crate::render::SUPERVISOR_ESTRATEGIA_ONE_FOR_ONE
/ crate::render::SUPERVISOR_ESTRATEGIA_ONE_FOR_ALL /
crate::render::SUPERVISOR_ESTRATEGIA_REST_FOR_ONE /
crate::render::SUPERVISOR_ESTRATEGIA_SIMPLE_ONE_FOR_ONE lifted
constants so every substrate consumer that dispatches on the
per-supervisor sibling-restart strategy (the future
wasm-operator’s per-supervisor sibling-restart branch, the future
M4 mesh.pleme.io/v1alpha1/Supervisor CR materializer’s
admission-time enum-arm bind, the caixa-operator’s hierarchical
reconciliation scheduler’s per-strategy fan-out) reads the same
byte-string the Serialize derive emits — the pin test in
[tests::restart_strategy_variants_serialize_to_lifted_scalar_values]
asserts the two paths agree, peer of the M3
PlacementStrategy::as_str (cc8f749) on the sibling per-Aplicacao
distribution-strategy axis.
Trait Implementations§
Source§impl Clone for RestartStrategy
impl Clone for RestartStrategy
Source§fn clone(&self) -> RestartStrategy
fn clone(&self) -> RestartStrategy
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for RestartStrategy
Source§impl Debug for RestartStrategy
impl Debug for RestartStrategy
Source§impl Default for RestartStrategy
impl Default for RestartStrategy
Source§impl<'de> Deserialize<'de> for RestartStrategy
impl<'de> Deserialize<'de> for RestartStrategy
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 Display for RestartStrategy
std::fmt::Display routed through RestartStrategy::as_str, so the
pretty-printed byte-string every consumer that formats the strategy as
user-facing text lands on (the future wasm-operator’s per-supervisor
sibling-restart-strategy diagnostic line, the future feira app graph
per-supervisor strategy line, the future M4
mesh.pleme.io/v1alpha1/Supervisor CR materializer’s admission-webhook
rejection body) reaches for the same lifted
crate::render::SUPERVISOR_ESTRATEGIA_ONE_FOR_ONE /
crate::render::SUPERVISOR_ESTRATEGIA_ONE_FOR_ALL /
crate::render::SUPERVISOR_ESTRATEGIA_REST_FOR_ONE /
crate::render::SUPERVISOR_ESTRATEGIA_SIMPLE_ONE_FOR_ONE const the
wire-format Serialize derive already emits under
crate::render::SUPERVISOR_KEY_ESTRATEGIA and the
RestartStrategy::as_str helper already returns.
impl Display for RestartStrategy
std::fmt::Display routed through RestartStrategy::as_str, so the
pretty-printed byte-string every consumer that formats the strategy as
user-facing text lands on (the future wasm-operator’s per-supervisor
sibling-restart-strategy diagnostic line, the future feira app graph
per-supervisor strategy line, the future M4
mesh.pleme.io/v1alpha1/Supervisor CR materializer’s admission-webhook
rejection body) reaches for the same lifted
crate::render::SUPERVISOR_ESTRATEGIA_ONE_FOR_ONE /
crate::render::SUPERVISOR_ESTRATEGIA_ONE_FOR_ALL /
crate::render::SUPERVISOR_ESTRATEGIA_REST_FOR_ONE /
crate::render::SUPERVISOR_ESTRATEGIA_SIMPLE_ONE_FOR_ONE const the
wire-format Serialize derive already emits under
crate::render::SUPERVISOR_KEY_ESTRATEGIA and the
RestartStrategy::as_str helper already returns.
Pre-convergence the two paths structurally disagreed — the
#[derive(gen_platform::Discriminant)] + #[discriminant(also_display)]
route (now retired here) sent std::fmt::Display through the
gen-platform discriminant catalog string, which arrives kebab-case as
"one-for-one" / "one-for-all" / "rest-for-one" /
"simple-one-for-one", while the wire format ran as PascalCase
"OneForOne" / "OneForAll" / "RestForOne" / "SimpleOneForOne"
through the un-renamed serde derive. Every consumer that formatted
the strategy for a diagnostic line, a graph, or a rejection body under
format!("{v}") therefore landed under a different byte-string than
the wire format the operator’s per-strategy dispatch keyed off — a
silent split whose apply-time symptom (a format!("{v}")-carrying
diagnostic quoting "one-for-one" while the wire scalar the operator
probed was "OneForOne") surfaced as a confused correlate at
operator-log time far from the two-declaration site.
Routing Display through RestartStrategy::as_str closes the third
path: every format!("{v}") call reaches the same lifted
[crate::render::SUPERVISOR_ESTRATEGIA_*] const the wire format and
the RestartStrategy::as_str helper route through — Debug (the
compiler-derived variant name), Display (via as_str), and Serialize
(via the un-renamed derive) all resolve to the same PascalCase
byte-string per variant. A future variant rename or
#[serde(rename_all = "kebab-case")] attribute reaches every path at
exactly one place, structurally.
The dispatcher-catalog identity remains kebab-case — Self::discriminant
(from #[derive(gen_platform::Discriminant)]) still returns
"one-for-one" / etc., and the fleet-wide
[gen_platform::register_dispatcher!("caixa.restart-strategy", …)]
registration keys the catalog off the same kebab identity. The two
naming worlds now live on separate typed methods (Display /
as_str for the wire byte-string, discriminant for the catalog
identity) rather than sharing one Display route that structurally
disagrees with the wire format.
Pin tests
[tests::restart_strategy_display_routes_through_as_str_helper]
and
[tests::restart_strategy_display_matches_serialized_wire_byte_string]
assert the three paths agree byte-for-byte on every variant, so a
future variant rename or per-arm serde attribute drift is a build
error visible at caixa-core test time, not a silent per-consumer
dispatch miss at apply / reconcile time.
Mirrors the M3 crate::aplicacao::PlacementStrategy Display impl
(aplicacao.rs:2306) on the sibling per-Aplicacao distribution-strategy
axis — same three-path-convergence discipline, extended to close the
second of three OTP-shaped closed-enum discriminator axes on the
caixa typed surface.
impl Eq for RestartStrategy
Source§impl FromStr for RestartStrategy
impl FromStr for RestartStrategy
Source§impl Hash for RestartStrategy
impl Hash for RestartStrategy
Source§impl PartialEq for RestartStrategy
impl PartialEq for RestartStrategy
Source§impl Serialize for RestartStrategy
impl Serialize for RestartStrategy
impl StructuralPartialEq for RestartStrategy
Source§impl TypedDispatcher for RestartStrategy
impl TypedDispatcher for RestartStrategy
Source§fn variant_kinds() -> Vec<&'static str>
fn variant_kinds() -> Vec<&'static str>
Source§fn variant_fields() -> Vec<(&'static str, Vec<&'static str>)>
fn variant_fields() -> Vec<(&'static str, Vec<&'static str>)>
inherit (variant) <fields> Nix patterns.Source§fn variant_count() -> usize
fn variant_count() -> usize
Auto Trait Implementations§
impl Freeze for RestartStrategy
impl RefUnwindSafe for RestartStrategy
impl Send for RestartStrategy
impl Sync for RestartStrategy
impl Unpin for RestartStrategy
impl UnsafeUnpin for RestartStrategy
impl UnwindSafe for RestartStrategy
Blanket Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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.