pub struct RefCoverage {
pub total: u64,
pub unmirrored: u64,
}Expand description
★ How many refs a mirror does not carry — the number behind
copied alice/korp 50 refs (94 not mirrored).
§The green row that was 56% of the truth
🔴 MEASURED on the live primary 2026-08-31, during the first restore drill:
across all 24 replicated repositories, 1292 refs exist and 567 of them are
not mirrored — alice/korp alone has 144 refs of which 94 never leave
this box. gunnar_client::mirror::is_mirrored_ref carries refs/heads/*
and refs/tags/* and nothing else, which is a deliberate choice and is not
changed here; what was missing is that nothing said so. replication list printed copied alice/korp 50 refs and the console drew a green
row: both true, and together they give an operator the impression that the
standby holds the repository. It holds every branch and tag of it.
Most of the difference is refs/remotes/origin/* left by pushes from mirror
clones. Not all of it: refs/superseded/wip-pre-reset-…,
refs/salvage/* and refs/original/refs are places somebody parked
work because it mattered, and for some of them the primary is the only
copy.
Counted from the PRIMARY’s own refs rather than from what an attempt did, so a repository that has never replicated still has a number, and a repository whose refs are all branches and tags reports 0 rather than nothing at all. A counter that only prints when it is non-zero is not a counter.
Fields§
§total: u64Every ref in the repository — the denominator.
unmirrored: u64Refs outside refs/heads/ and refs/tags/: on this box only.
Implementations§
Source§impl RefCoverage
impl RefCoverage
Sourcepub fn mirrorable(&self) -> u64
pub fn mirrorable(&self) -> u64
Refs a standby can hold: total - unmirrored.
Sourcepub fn add(&mut self, other: RefCoverage)
pub fn add(&mut self, other: RefCoverage)
Add another repository’s count into a server-wide total.
Trait Implementations§
Source§impl Clone for RefCoverage
impl Clone for RefCoverage
impl Copy for RefCoverage
Source§impl Debug for RefCoverage
impl Debug for RefCoverage
Source§impl Default for RefCoverage
impl Default for RefCoverage
impl Eq for RefCoverage
Source§impl PartialEq for RefCoverage
impl PartialEq for RefCoverage
impl StructuralPartialEq for RefCoverage
Auto Trait Implementations§
impl Freeze for RefCoverage
impl RefUnwindSafe for RefCoverage
impl Send for RefCoverage
impl Sync for RefCoverage
impl Unpin for RefCoverage
impl UnsafeUnpin for RefCoverage
impl UnwindSafe for RefCoverage
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