pub enum FeatureActivationError {
UnknownFeature {
feature: String,
},
LevelBelowRequirement {
feature: String,
required: ClusterFeatureLevel,
attempted: ClusterFeatureLevel,
},
LevelRegression {
current: ClusterFeatureLevel,
attempted: ClusterFeatureLevel,
},
UnsupportedByVoter {
feature: String,
node: NodeId,
},
NoVoters,
}Expand description
Why a FeatureActivation may not be applied. Activation failures fail
closed (ADR-0010).
Serde derives exist so the meta group’s rejection journal
(MetaRejection) can record the typed reason inside replicated state.
Variants§
UnknownFeature
The feature is not declared in this binary’s registry.
LevelBelowRequirement
The activation level is below the feature’s registered minimum.
Fields
required: ClusterFeatureLevelRegistered minimum level for the feature.
attempted: ClusterFeatureLevelLevel the activation attempted.
LevelRegression
The activation would lower the cluster feature level; the level never regresses (ADR-0010: no in-place un-activate).
Fields
current: ClusterFeatureLevelCurrent cluster feature level.
attempted: ClusterFeatureLevelLevel the activation attempted.
UnsupportedByVoter
A voter’s advertisement does not include the feature (spec section 11.8 step 5: enable new features only after every voter supports them).
Fields
node: NodeIdThe first voter whose VersionInfo::feature_set lacks it.
NoVoters
Activation with no voters is meaningless; fail closed.
Trait Implementations§
Source§impl Clone for FeatureActivationError
impl Clone for FeatureActivationError
Source§fn clone(&self) -> FeatureActivationError
fn clone(&self) -> FeatureActivationError
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 FeatureActivationError
impl Debug for FeatureActivationError
Source§impl<'de> Deserialize<'de> for FeatureActivationError
impl<'de> Deserialize<'de> for FeatureActivationError
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 FeatureActivationError
impl Display for FeatureActivationError
impl Eq for FeatureActivationError
Source§impl Error for FeatureActivationError
impl Error for FeatureActivationError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<FeatureActivationError> for MetaRejectionReason
impl From<FeatureActivationError> for MetaRejectionReason
Source§fn from(source: FeatureActivationError) -> Self
fn from(source: FeatureActivationError) -> Self
Source§impl PartialEq for FeatureActivationError
impl PartialEq for FeatureActivationError
Source§impl Serialize for FeatureActivationError
impl Serialize for FeatureActivationError
impl StructuralPartialEq for FeatureActivationError
Auto Trait Implementations§
impl Freeze for FeatureActivationError
impl RefUnwindSafe for FeatureActivationError
impl Send for FeatureActivationError
impl Sync for FeatureActivationError
impl Unpin for FeatureActivationError
impl UnsafeUnpin for FeatureActivationError
impl UnwindSafe for FeatureActivationError
Blanket Implementations§
impl<T> AppData for Twhere
T: OptionalSend + OptionalSync + 'static + OptionalSerde,
impl<T> AppDataResponse for Twhere
T: OptionalSend + OptionalSync + 'static + OptionalSerde,
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
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> 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.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request