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)
}
/// Builds a [Pruner] with the given config.
fn build_pruner<DB: Database>(
&self,
config: &PruneConfig,
db: DB,
highest_snapshots_rx: HighestSnapshotsTracker,
) -> Pruner<DB> {
let mut segments = SegmentSet::new();
if let Some(mode) = config.segments.receipts {
segments = segments.add_segment(reth_prune::segments::Receipts::new(mode));
}
if !config.segments.receipts_log_filter.is_empty() {
segments = segments.add_segment(reth_prune::segments::ReceiptsByLogs::new(
config.segments.receipts_log_filter.clone(),
));
}
if let Some(mode) = config.segments.transaction_lookup {
segments = segments.add_segment(reth_prune::segments::TransactionLookup::new(mode));
}
if let Some(mode) = config.segments.sender_recovery {
segments = segments.add_segment(reth_prune::segments::SenderRecovery::new(mode));
}
if let Some(mode) = config.segments.account_history {
segments = segments.add_segment(reth_prune::segments::AccountHistory::new(mode));
}
if let Some(mode) = config.segments.storage_history {
segments = segments.add_segment(reth_prune::segments::StorageHistory::new(mode));
}
let segments = SegmentSet::default()
// Receipts
.segment_opt(config.segments.receipts.map(reth_prune::segments::Receipts::new))
// Receipts by logs
.segment_opt((!config.segments.receipts_log_filter.is_empty()).then(|| {
reth_prune::segments::ReceiptsByLogs::new(
config.segments.receipts_log_filter.clone(),
)
}))
// Transaction lookup
.segment_opt(
config
.segments
.transaction_lookup
.map(reth_prune::segments::TransactionLookup::new),
)
// Sender recovery
.segment_opt(
config.segments.sender_recovery.map(reth_prune::segments::SenderRecovery::new),
)
// 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(
db,

View File

@ -15,11 +15,19 @@ impl<DB: Database> SegmentSet<DB> {
}
/// 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
}
/// 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].
pub fn into_vec(self) -> Vec<Arc<dyn Segment<DB>>> {
self.inner