pub struct Pipeline<N: ProviderNodeTypes> { /* private fields */ }
Expand description
A staged sync pipeline.
The pipeline executes queued stages serially. An external component determines the tip of the chain and the pipeline then executes each stage in order from the current local chain tip and the external chain tip. When a stage is executed, it will run until it reaches the chain tip.
After the entire pipeline has been run, it will run again unless asked to stop (see
[Pipeline::set_max_block
]).
include_mmd!("docs/mermaid/pipeline.mmd
“)
§Unwinding
In case of a validation error (as determined by the consensus engine) in one of the stages, the
pipeline will unwind the stages in reverse order of execution. It is also possible to
request an unwind manually (see Pipeline::unwind
).
§Defaults
The DefaultStages
are used to fully sync reth.
Implementations§
Source§impl<N: ProviderNodeTypes> Pipeline<N>
impl<N: ProviderNodeTypes> Pipeline<N>
Sourcepub fn builder() -> PipelineBuilder<<ProviderFactory<N> as DatabaseProviderFactory>::ProviderRW>
pub fn builder() -> PipelineBuilder<<ProviderFactory<N> as DatabaseProviderFactory>::ProviderRW>
Construct a pipeline using a PipelineBuilder
.
Sourcepub const fn minimum_block_number(&self) -> Option<u64>
pub const fn minimum_block_number(&self) -> Option<u64>
Return the minimum block number achieved by any stage during the execution of the pipeline.
Sourcepub fn events(&self) -> EventStream<PipelineEvent>
pub fn events(&self) -> EventStream<PipelineEvent>
Listen for events on the pipeline.
Source§impl<N: ProviderNodeTypes> Pipeline<N>
impl<N: ProviderNodeTypes> Pipeline<N>
Sourcepub fn register_metrics(&mut self) -> Result<(), PipelineError>
pub fn register_metrics(&mut self) -> Result<(), PipelineError>
Registers progress metrics for each registered stage
Sourcepub fn run_as_fut(self, target: Option<PipelineTarget>) -> PipelineFut<N>
pub fn run_as_fut(self, target: Option<PipelineTarget>) -> PipelineFut<N>
Consume the pipeline and run it until it reaches the provided tip, if set. Return the pipeline and its result as a future.
Sourcepub async fn run(&mut self) -> Result<(), PipelineError>
pub async fn run(&mut self) -> Result<(), PipelineError>
Run the pipeline in an infinite loop. Will terminate early if the user has specified
a max_block
in the pipeline.
Sourcepub async fn run_loop(&mut self) -> Result<ControlFlow, PipelineError>
pub async fn run_loop(&mut self) -> Result<ControlFlow, PipelineError>
Performs one pass of the pipeline across all stages. After successful execution of each stage, it proceeds to commit it to the database.
If any stage is unsuccessful at execution, we proceed to unwind. This will undo the progress across the entire pipeline up to the block that caused the error.
Returns the control flow after it ran the pipeline.
This will be ControlFlow::Continue
or ControlFlow::NoProgress
of the last stage in
the pipeline (for example the Finish
stage). Or ControlFlow::Unwind
of the stage
that caused the unwind.
Sourcepub fn move_to_static_files(&self) -> RethResult<()>
pub fn move_to_static_files(&self) -> RethResult<()>
Run static file producer and pruner to move all data from the database to static files for corresponding segments, according to their stage checkpoints:
StaticFileSegment::Headers
->StageId::Headers
StaticFileSegment::Receipts
->StageId::Execution
StaticFileSegment::Transactions
->StageId::Bodies
CAUTION: This method locks the static file producer Mutex, hence can block the thread if the lock is occupied.
Trait Implementations§
Auto Trait Implementations§
impl<N> Freeze for Pipeline<N>where
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockBody: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Block: Sized,
<N as NodeTypes>::ChainSpec: Sized,
<N as NodeTypesWithDB>::DB: Freeze,
impl<N> !RefUnwindSafe for Pipeline<N>
impl<N> Send for Pipeline<N>where
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockBody: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Block: Sized,
<N as NodeTypes>::ChainSpec: Sized,
impl<N> Sync for Pipeline<N>where
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockBody: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Block: Sized,
<N as NodeTypes>::ChainSpec: Sized,
impl<N> Unpin for Pipeline<N>where
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockHeader: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Receipt: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::SignedTx: Sized,
<N as NodeTypes>::Primitives: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::BlockBody: Sized,
<<N as NodeTypes>::Primitives as NodePrimitives>::Block: Sized,
<N as NodeTypes>::ChainSpec: Sized,
impl<N> !UnwindSafe for Pipeline<N>
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<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeDebug for Twhere
T: Debug,
impl<T> MaybeSendSync for T
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.