style: builder style segment set (#5209)

This commit is contained in:
Matthias Seitz
2023-10-30 13:57:52 +01:00
committed by GitHub
parent e73ece945d
commit 07552ca149
2 changed files with 38 additions and 23 deletions

View File

@ -914,34 +914,41 @@ impl<Ext: RethCliExt> NodeCommand<Ext> {
Ok(pipeline) Ok(pipeline)
} }
/// Builds a [Pruner] with the given config.
fn build_pruner<DB: Database>( fn build_pruner<DB: Database>(
&self, &self,
config: &PruneConfig, config: &PruneConfig,
db: DB, db: DB,
highest_snapshots_rx: HighestSnapshotsTracker, highest_snapshots_rx: HighestSnapshotsTracker,
) -> Pruner<DB> { ) -> Pruner<DB> {
let mut segments = SegmentSet::new(); let segments = SegmentSet::default()
// Receipts
if let Some(mode) = config.segments.receipts { .segment_opt(config.segments.receipts.map(reth_prune::segments::Receipts::new))
segments = segments.add_segment(reth_prune::segments::Receipts::new(mode)); // Receipts by logs
} .segment_opt((!config.segments.receipts_log_filter.is_empty()).then(|| {
if !config.segments.receipts_log_filter.is_empty() { reth_prune::segments::ReceiptsByLogs::new(
segments = segments.add_segment(reth_prune::segments::ReceiptsByLogs::new( config.segments.receipts_log_filter.clone(),
config.segments.receipts_log_filter.clone(), )
)); }))
} // Transaction lookup
if let Some(mode) = config.segments.transaction_lookup { .segment_opt(
segments = segments.add_segment(reth_prune::segments::TransactionLookup::new(mode)); config
} .segments
if let Some(mode) = config.segments.sender_recovery { .transaction_lookup
segments = segments.add_segment(reth_prune::segments::SenderRecovery::new(mode)); .map(reth_prune::segments::TransactionLookup::new),
} )
if let Some(mode) = config.segments.account_history { // Sender recovery
segments = segments.add_segment(reth_prune::segments::AccountHistory::new(mode)); .segment_opt(
} config.segments.sender_recovery.map(reth_prune::segments::SenderRecovery::new),
if let Some(mode) = config.segments.storage_history { )
segments = segments.add_segment(reth_prune::segments::StorageHistory::new(mode)); // Account history
} .segment_opt(
config.segments.account_history.map(reth_prune::segments::AccountHistory::new),
)
// Storage history
.segment_opt(
config.segments.storage_history.map(reth_prune::segments::StorageHistory::new),
);
Pruner::new( Pruner::new(
db, db,

View File

@ -15,11 +15,19 @@ impl<DB: Database> SegmentSet<DB> {
} }
/// Adds new [Segment] to collection. /// Adds new [Segment] to collection.
pub fn add_segment<S: Segment<DB> + 'static>(mut self, segment: S) -> Self { pub fn segment<S: Segment<DB> + 'static>(mut self, segment: S) -> Self {
self.inner.push(Arc::new(segment)); self.inner.push(Arc::new(segment));
self self
} }
/// Adds new [Segment] to collection if it's [Some].
pub fn segment_opt<S: Segment<DB> + 'static>(self, segment: Option<S>) -> Self {
if let Some(segment) = segment {
return self.segment(segment)
}
self
}
/// Consumes [SegmentSet] and returns a [Vec]. /// Consumes [SegmentSet] and returns a [Vec].
pub fn into_vec(self) -> Vec<Arc<dyn Segment<DB>>> { pub fn into_vec(self) -> Vec<Arc<dyn Segment<DB>>> {
self.inner self.inner