pub enum State {
Following,
SnapshotNeeded,
Unreachable,
Stalled,
Diverged,
Maintenance,
Recovering,
Resyncing,
}Expand description
The twin’s state word.
Variants§
Following
Polling, fetching, applying.
SnapshotNeeded
The primary no longer retains what the twin needs next.
Unreachable
The last poll could not reach the primary.
Stalled
The poll got as far as the data and then failed — the fetch died mid-range, the append would not go on the volume, an entry would not apply. The primary is not the problem; this copy stops where it stopped.
Diverged
The box at the other end is not the log this twin has been following. Its head is BELOW what this twin has already applied, and a log’s head only ever goes forward — so it is a re-imaged primary, a restore from somewhere else, or an address that now points at a different set. Stopped: an operator decides.
Maintenance
This twin is growing its own data set (T21, 2026-09-22, owner ruling: the twin grows EXACTLY like main — no restart). The grow machine has drained it: the follower applies nothing and the set may be unmounted. It still asks its primary for the head, so both ends see the word and the lag; it follows again the moment the set is mounted back.
Recovering
★ This twin is owed a growth before it may follow (cov-13, 2026-10-06):
main’s data set grew while it was silent, and its volume cannot hold it —
the primary refuses its fetches by name (gunnar_grpc::TWIN_TOO_SMALL)
rather than let it fill part-way through main’s data. It keeps polling
(so it reads heard, and monetize’s twin lane grows it) and follows the
moment its report holds main’s set. Nothing is appended meanwhile.
Resyncing
★ This twin is taking a full copy (a snapshot) from its primary (twin-resync-space,
2026-10-06): it fell behind a hole main’s retention trimmed. Its old copy is kept while
the volume holds both; when it does not, the twin GIVES IT UP (snapshot::DROPPED) and the
why says it holds NO copy — it serves nothing then, and a crash restarts the resync.
Trait Implementations§
impl Copy for State
impl Eq for State
impl StructuralPartialEq for State
Auto Trait Implementations§
impl Freeze for State
impl RefUnwindSafe for State
impl Send for State
impl Sync for State
impl Unpin for State
impl UnsafeUnpin for State
impl UnwindSafe for State
Blanket Implementations§
impl<T> Allocation for T
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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§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> 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