pub struct Config<DB, S>where
DB: Database,{
pub context: DB::Context,
pub source: S,
pub target: Target<DB::Family, DB::Digest>,
pub max_outstanding_requests: NonZeroUsize,
pub fetch_batch_size: NonZeroU64,
pub apply_batch_size: NonZeroU64,
pub db_config: DB::Config,
pub update_rx: Option<Receiver<Target<DB::Family, DB::Digest>>>,
pub finish_rx: Option<Receiver<()>>,
pub reached_target_tx: Option<Sender<Target<DB::Family, DB::Digest>>>,
}Expand description
Configuration for creating a new Engine
Fields§
§context: DB::ContextRuntime context for creating database components
source: SSource of operations and proofs
target: Target<DB::Family, DB::Digest>Trusted sync target (root digest and operation bounds).
The engine only verifies source data against this commitment and does not select or authenticate the target.
max_outstanding_requests: NonZeroUsizeMaximum number of outstanding requests. The boundary request for the pinned nodes counts toward it.
Requests cover the next unfetched gaps anywhere in the sync range, so operations fetched ahead of an unanswered request wait in memory until it is answered. The buffered amount grows with the fetch rate and the time a request stays unanswered, which the source’s timeout and retry policy bounds.
fetch_batch_size: NonZeroU64Maximum operations to fetch per batch
apply_batch_size: NonZeroU64Number of operations to apply in a single batch
db_config: DB::ConfigDatabase-specific configuration
update_rx: Option<Receiver<Target<DB::Family, DB::Digest>>>Channel for receiving sync target updates.
The caller selects targets before sending updates and sends valid targets of the same database in advancing order; an update may be superseded by a newer one before the engine reads it. The engine adopts only strictly advancing targets and discards the rest.
finish_rx: Option<Receiver<()>>Channel that requests sync completion once the current target is reached.
When None, sync completes as soon as the target is reached.
reached_target_tx: Option<Sender<Target<DB::Family, DB::Digest>>>Channel used to notify an observer once the current target is reached.
The engine reports each reached target at most once, in the order reached, and never waits for the observer, so an observer that falls behind skips intermediate reports.
Auto Trait Implementations§
impl<DB, S> !RefUnwindSafe for Config<DB, S>
impl<DB, S> !UnwindSafe for Config<DB, S>
impl<DB, S> Freeze for Config<DB, S>where
<DB as Database>::Context: Freeze,
S: Freeze,
Target<<DB as Database>::Family, <DB as Database>::Digest>: Freeze,
<DB as Database>::Config: Freeze,
Option<Receiver<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: Freeze,
Option<Sender<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: Freeze,
impl<DB, S> Send for Config<DB, S>where
<DB as Database>::Context: Send,
S: Send,
Target<<DB as Database>::Family, <DB as Database>::Digest>: Send,
<DB as Database>::Config: Send,
Option<Receiver<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: Send,
Option<Sender<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: Send,
impl<DB, S> Sync for Config<DB, S>where
<DB as Database>::Context: Sync,
S: Sync,
Target<<DB as Database>::Family, <DB as Database>::Digest>: Sync,
<DB as Database>::Config: Sync,
Option<Receiver<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: Sync,
Option<Sender<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: Sync,
impl<DB, S> Unpin for Config<DB, S>where
<DB as Database>::Context: Unpin,
S: Unpin,
Target<<DB as Database>::Family, <DB as Database>::Digest>: Unpin,
<DB as Database>::Config: Unpin,
Option<Receiver<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: Unpin,
Option<Sender<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: Unpin,
impl<DB, S> UnsafeUnpin for Config<DB, S>where
<DB as Database>::Context: UnsafeUnpin,
S: UnsafeUnpin,
Target<<DB as Database>::Family, <DB as Database>::Digest>: UnsafeUnpin,
<DB as Database>::Config: UnsafeUnpin,
Option<Receiver<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: UnsafeUnpin,
Option<Sender<Target<<DB as Database>::Family, <DB as Database>::Digest>>>: UnsafeUnpin,
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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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