pub enum MetaRejectionReason {
FeatureActivation(FeatureActivationError),
SecretSettingKey {
key: String,
},
UnknownSettingKey {
key: String,
},
InvalidSettingValue {
key: String,
reason: String,
},
StaleWrite {
resource: String,
current: MetadataVersion,
attempted: MetadataVersion,
},
Conflict {
resource: String,
reason: String,
},
NotFound {
resource: String,
},
Invalid {
reason: String,
},
ProposalFailed {
reason: String,
},
NotLeader {
leader: Option<u64>,
},
}Expand description
Why a MetaCommand was refused at apply. Refusals are deterministic
(every replica reaches the same conclusion from the same state) and never
fault the raft state machine: they are journaled in
MetaState::rejections and reported to the proposer by
MetaGroup::propose.
Variants§
FeatureActivation(FeatureActivationError)
Feature activation failed validation (spec section 11.8 step 5; re-validated at apply, ADR-0010 decision 4).
SecretSettingKey
The setting key is on the secrets denylist (spec section 16.2).
UnknownSettingKey
The setting key maps to no typed setting.
InvalidSettingValue
The setting value failed typed parsing or validation.
StaleWrite
A last-writer-wins guard rejected an out-of-date write.
Fields
current: MetadataVersionVersion currently stored.
attempted: MetadataVersionVersion the command carried.
Conflict
The command conflicts with existing state.
NotFound
A referenced record does not exist.
Invalid
The command itself is malformed.
ProposalFailed
A meta-plane binding’s proposal transport failed (leader loss,
timeout, shutdown) before the command’s outcome was known. Never
journaled from apply — apply-time refusals are deterministic; this
surfaces only through the
crate::split::TabletMetaPlane/crate::merge::MergeMetaPlane
seams the node runtime drives. Every split/merge descriptor write is
idempotent, so retrying the failed step is safe.
NotLeader
The node receiving the proposal is not the meta leader (spec section 11.7): the caller re-resolves the leader and retries there. Carried structured (never stringified) so gateways and split/merge drivers can pattern-match it; split/merge descriptor writes are idempotent, so the retry is safe.
Trait Implementations§
Source§impl Clone for MetaRejectionReason
impl Clone for MetaRejectionReason
Source§fn clone(&self) -> MetaRejectionReason
fn clone(&self) -> MetaRejectionReason
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 MetaRejectionReason
impl Debug for MetaRejectionReason
Source§impl<'de> Deserialize<'de> for MetaRejectionReason
impl<'de> Deserialize<'de> for MetaRejectionReason
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 MetaRejectionReason
impl Display for MetaRejectionReason
impl Eq for MetaRejectionReason
Source§impl Error for MetaRejectionReason
impl Error for MetaRejectionReason
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 From<MetaRejectionReason> for DdlRejection
impl From<MetaRejectionReason> for DdlRejection
Source§fn from(source: MetaRejectionReason) -> Self
fn from(source: MetaRejectionReason) -> Self
Source§impl From<MetaRejectionReason> for MergeError
impl From<MetaRejectionReason> for MergeError
Source§fn from(source: MetaRejectionReason) -> Self
fn from(source: MetaRejectionReason) -> Self
Source§impl From<MetaRejectionReason> for SplitError
impl From<MetaRejectionReason> for SplitError
Source§fn from(source: MetaRejectionReason) -> Self
fn from(source: MetaRejectionReason) -> Self
Source§impl PartialEq for MetaRejectionReason
impl PartialEq for MetaRejectionReason
Source§impl Serialize for MetaRejectionReason
impl Serialize for MetaRejectionReason
impl StructuralPartialEq for MetaRejectionReason
Auto Trait Implementations§
impl Freeze for MetaRejectionReason
impl RefUnwindSafe for MetaRejectionReason
impl Send for MetaRejectionReason
impl Sync for MetaRejectionReason
impl Unpin for MetaRejectionReason
impl UnsafeUnpin for MetaRejectionReason
impl UnwindSafe for MetaRejectionReason
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