pub struct LocalSource {
pub stores: Arc<ServerStores>,
pub retained_from: u64,
}Expand description
A source over another box’s stores in this process — its log for ranges, and a snapshot of its stores for a hole. What a restore from a twin’s data root reads, and what the tests follow a primary through.
Fields§
§stores: Arc<ServerStores>The box read from.
retained_from: u64Pretend retention starts here (tests: a hole without rolling segments). 0 = the log’s own.
Trait Implementations§
Source§impl LogSource for LocalSource
impl LogSource for LocalSource
Source§fn fetch(&self, from: u64, to: u64, max_bytes: u64) -> Result<Vec<Entry>>
fn fetch(&self, from: u64, to: u64, max_bytes: u64) -> Result<Vec<Entry>>
Entries
from..=to, at most about max_bytes of blob, never fewer
than one when from <= to.Source§fn fetch_into(
&self,
from: u64,
to: u64,
max_bytes: u64,
into: &mut dyn FrameSink,
) -> Result<()>
fn fetch_into( &self, from: u64, to: u64, max_bytes: u64, into: &mut dyn FrameSink, ) -> Result<()>
LogSource::fetch, streamed into into — what the follower calls (twin-streaming,
2026-10-06). Every source that reads a real log overrides it (GrpcSource off the wire,
a bare Arc<Log> and LocalSource off the segments), so an entry is never whole in
memory however large it is. The default gathers through fetch and hands each blob over
as one piece: right for a scripted source, whose entries are already in its hands.Source§fn snapshot(&self, into: &mut Stager) -> Result<bool>
fn snapshot(&self, into: &mut Stager) -> Result<bool>
A consistent snapshot of the source’s stores, for a twin behind a retention hole, fed
piece by piece
into the twin’s staging area as it arrives. false = this source
cannot make one (a bare log): the twin stops with snapshot-needed.Source§fn alternatives(&self) -> bool
fn alternatives(&self) -> bool
Does the primary have another address to re-dial when this one keeps
failing? (The tunnel’s and the utility network’s.) In-process sources
have none.
Source§fn head_and_identity(&self) -> Result<(u64, u64, Option<String>)>
fn head_and_identity(&self) -> Result<(u64, u64, Option<String>)>
(first_seq, head_seq, the source's log identity) — one call, because
the identity has to come from the SAME answer as the numbers it
qualifies. Asking twice would leave a window in which the numbers are
one box’s and the name is another’s, which is the bug in a nicer shape. Read moreSource§fn head_identity_generation(&self) -> Result<(u64, u64, Option<String>, u64)>
fn head_identity_generation(&self) -> Result<(u64, u64, Option<String>, u64)>
LogSource::head_and_identity and the source’s GENERATION
(LOG_GENERATION), out of the same answer. 0 = none claimed: every
in-process source, and a primary never restored or older than the field.Auto Trait Implementations§
impl !RefUnwindSafe for LocalSource
impl !UnwindSafe for LocalSource
impl Freeze for LocalSource
impl Send for LocalSource
impl Sync for LocalSource
impl Unpin for LocalSource
impl UnsafeUnpin for LocalSource
Blanket Implementations§
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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>
Wrap the input message
T in a tonic::Request