pub enum SubjectOutcome {
Absent,
SourceTooHot {
detail: String,
},
Snapshot(SnapshotOutcome),
Dedup(DedupOutcome),
Stream {
base_snapshot_key: String,
base_published: bool,
base_attempts: u32,
outcome: StreamOutcome,
},
}Expand description
What one subject’s turn in a round did.
Variants§
Absent
The declared database does not exist on the volume. Not an error: a workload may declare a subject it creates lazily, and the first rounds after a first placement legitimately find nothing. Reported rather than skipped silently so “why is this subject not backed up” has an answer.
SourceTooHot
The source database was moving under every attempt to copy it, so nothing was published this round.
R858-B18 made stream::raw_consistent_copy_live refuse rather than
return a torn image when a checkpoint lands inside the read window, after
stream::COPY_VALIDATION_ATTEMPTS tries. That refusal is a transient
property of the writer, not a failure of this tail — @Ashguard:polaris
measured 9 of 12 copies refused under a hammering writer with a 16-page
autocheckpoint, and 12 of 12 accepted at a realistic rate. Treating it as
fatal would take a busy appliance’s backup down and leave it down.
It is a reported non-event rather than a silent one because a subject
that reports this every round forever is not backed up, and the operator
needs to see that as a longer wal_autocheckpoint, not as silence.
Snapshot(SnapshotOutcome)
Tier 1a.
Dedup(DedupOutcome)
Tier 1b.
Stream
Tier 2. base_published is set on the round that established the base
this stream is anchored to; base_attempts is how many copies that took
(see [MAX_BASE_ATTEMPTS]).
Trait Implementations§
Source§impl Clone for SubjectOutcome
impl Clone for SubjectOutcome
Source§impl Debug for SubjectOutcome
impl Debug for SubjectOutcome
impl Eq for SubjectOutcome
Source§impl PartialEq for SubjectOutcome
impl PartialEq for SubjectOutcome
impl StructuralPartialEq for SubjectOutcome
Auto Trait Implementations§
impl Freeze for SubjectOutcome
impl RefUnwindSafe for SubjectOutcome
impl Send for SubjectOutcome
impl Sync for SubjectOutcome
impl Unpin for SubjectOutcome
impl UnsafeUnpin for SubjectOutcome
impl UnwindSafe for SubjectOutcome
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,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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<K, Q> Equivalent<Q> for K
impl<K, Q> Equivalent<Q> for K
Source§fn equivalent(&self, key: &Q) -> bool
fn equivalent(&self, key: &Q) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> Fruit for T
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 more