pub struct RestoreReport {
pub expected: Checkpoint,
pub rebuilt: Checkpoint,
pub runs: usize,
pub records: usize,
pub cases: usize,
pub awaiting: Vec<RunId>,
pub not_carried: Vec<String>,
}Expand description
What a restore did, and what it could not carry across.
Fields§
§expected: CheckpointThe checkpoint the export claimed.
rebuilt: CheckpointThe checkpoint the rebuilt store now reports.
These matching is the whole result. Equal roots at equal size means every record, in every run, in the order the log recorded them, rebuilt to the same commitment — which is a far stronger statement than “the rows loaded”.
runs: usize§records: usize§cases: usizeCases rebuilt from the export’s case layer.
awaiting: Vec<RunId>Runs whose history ends in a wait, and which nothing will now wake.
Ids rather than a count, because the operator has to act on each one. A wait is journaled but what performs it is not: the timer, the subscription and the task row live in stores this export does not carry. A restored suspended run has no timer to fire, no subscription to match, and released its lease cleanly when it suspended — so the recovery pass does not see it either. Nothing in the system names it, which is the state the runtime otherwise repairs on sight.
Resuming each one repairs it: replay reaches the announced wait, finds no terminal record, and re-arms from the journal. That needs the agent’s own code, so it is the caller’s step and not the restore’s.
not_carried: Vec<String>What did not survive, named rather than counted.
Implementations§
Source§impl RestoreReport
impl RestoreReport
Sourcepub fn is_faithful(&self) -> bool
pub fn is_faithful(&self) -> bool
Whether the rebuilt store commits to exactly the history the export did.
The commitment, not the label. A checkpoint carries a log identity
beside its size and root, and a recovery routinely changes that: the
realistic restore is into another tenant of a database somebody else is
already using, which is the topology for_tenant exists for. Comparing
the identity made a byte-perfect restore report as a failed one exactly
in the case a disaster puts an operator in — and agentplane restore
exits on this predicate.
A relabelling is not silent for being excluded: it is a sentence in
not_carried, beside every other thing the file
could not bring across, and both checkpoints are on the report for a
reader who wants to see the names.
Trait Implementations§
Source§impl Clone for RestoreReport
impl Clone for RestoreReport
Source§impl Debug for RestoreReport
impl Debug for RestoreReport
impl Eq for RestoreReport
Source§impl PartialEq for RestoreReport
impl PartialEq for RestoreReport
Source§impl Serialize for RestoreReport
impl Serialize for RestoreReport
impl StructuralPartialEq for RestoreReport
Auto Trait Implementations§
impl Freeze for RestoreReport
impl RefUnwindSafe for RestoreReport
impl Send for RestoreReport
impl Sync for RestoreReport
impl Unpin for RestoreReport
impl UnsafeUnpin for RestoreReport
impl UnwindSafe for RestoreReport
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
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,
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> 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