reth_stages_api/pipeline/
progress.rs

1use crate::{util::opt, ControlFlow};
2use alloy_primitives::BlockNumber;
3
4#[derive(Debug, Default)]
5pub(crate) struct PipelineProgress {
6    /// Block number reached by the stage.
7    pub(crate) block_number: Option<BlockNumber>,
8    /// The maximum block number achieved by any stage during the execution of the pipeline.
9    pub(crate) maximum_block_number: Option<BlockNumber>,
10    /// The minimum block number achieved by any stage during the execution of the pipeline.
11    pub(crate) minimum_block_number: Option<BlockNumber>,
12}
13
14impl PipelineProgress {
15    pub(crate) fn update(&mut self, block_number: BlockNumber) {
16        self.block_number = Some(block_number);
17        self.minimum_block_number = opt::min(self.minimum_block_number, block_number);
18        self.maximum_block_number = opt::max(self.maximum_block_number, block_number);
19    }
20
21    /// Get next control flow step
22    pub(crate) const fn next_ctrl(&self) -> ControlFlow {
23        match self.block_number {
24            Some(block_number) => ControlFlow::Continue { block_number },
25            None => ControlFlow::NoProgress { block_number: None },
26        }
27    }
28}