feat: make StaticFileProvider generic over NodePrimitives (#12565)

This commit is contained in:
Arsenii Kulikov
2024-11-15 14:42:58 +04:00
committed by GitHub
parent cd9da550da
commit 72a52d5ea5
38 changed files with 324 additions and 222 deletions

View File

@ -76,8 +76,11 @@ impl PrunerBuilder {
/// Builds a [Pruner] from the current configuration with the given provider factory.
pub fn build_with_provider_factory<PF>(self, provider_factory: PF) -> Pruner<PF::ProviderRW, PF>
where
PF: DatabaseProviderFactory<ProviderRW: PruneCheckpointWriter + BlockReader>
+ StaticFileProviderFactory,
PF: DatabaseProviderFactory<
ProviderRW: PruneCheckpointWriter + BlockReader + StaticFileProviderFactory,
> + StaticFileProviderFactory<
Primitives = <PF::ProviderRW as StaticFileProviderFactory>::Primitives,
>,
{
let segments =
SegmentSet::from_components(provider_factory.static_file_provider(), self.segments);
@ -93,10 +96,16 @@ impl PrunerBuilder {
}
/// Builds a [Pruner] from the current configuration with the given static file provider.
pub fn build<Provider>(self, static_file_provider: StaticFileProvider) -> Pruner<Provider, ()>
pub fn build<Provider>(
self,
static_file_provider: StaticFileProvider<Provider::Primitives>,
) -> Pruner<Provider, ()>
where
Provider:
DBProvider<Tx: DbTxMut> + BlockReader + PruneCheckpointWriter + TransactionsProvider,
Provider: StaticFileProviderFactory
+ DBProvider<Tx: DbTxMut>
+ BlockReader
+ PruneCheckpointWriter
+ TransactionsProvider,
{
let segments = SegmentSet::<Provider>::from_components(static_file_provider, self.segments);

View File

@ -5,7 +5,7 @@ use crate::segments::{
use reth_db::transaction::DbTxMut;
use reth_provider::{
providers::StaticFileProvider, BlockReader, DBProvider, PruneCheckpointWriter,
TransactionsProvider,
StaticFileProviderFactory, TransactionsProvider,
};
use reth_prune_types::PruneModes;
@ -45,12 +45,16 @@ impl<Provider> SegmentSet<Provider> {
impl<Provider> SegmentSet<Provider>
where
Provider: DBProvider<Tx: DbTxMut> + TransactionsProvider + PruneCheckpointWriter + BlockReader,
Provider: StaticFileProviderFactory
+ DBProvider<Tx: DbTxMut>
+ TransactionsProvider
+ PruneCheckpointWriter
+ BlockReader,
{
/// Creates a [`SegmentSet`] from an existing components, such as [`StaticFileProvider`] and
/// [`PruneModes`].
pub fn from_components(
static_file_provider: StaticFileProvider,
static_file_provider: StaticFileProvider<Provider::Primitives>,
prune_modes: PruneModes,
) -> Self {
let PruneModes {

View File

@ -12,7 +12,7 @@ use reth_db::{
tables,
transaction::DbTxMut,
};
use reth_provider::{providers::StaticFileProvider, DBProvider};
use reth_provider::{providers::StaticFileProvider, DBProvider, StaticFileProviderFactory};
use reth_prune_types::{
PruneLimiter, PruneMode, PruneProgress, PrunePurpose, PruneSegment, SegmentOutput,
SegmentOutputCheckpoint,
@ -24,17 +24,19 @@ use tracing::trace;
const HEADER_TABLES_TO_PRUNE: usize = 3;
#[derive(Debug)]
pub struct Headers {
static_file_provider: StaticFileProvider,
pub struct Headers<N> {
static_file_provider: StaticFileProvider<N>,
}
impl Headers {
pub const fn new(static_file_provider: StaticFileProvider) -> Self {
impl<N> Headers<N> {
pub const fn new(static_file_provider: StaticFileProvider<N>) -> Self {
Self { static_file_provider }
}
}
impl<Provider: DBProvider<Tx: DbTxMut>> Segment<Provider> for Headers {
impl<Provider: StaticFileProviderFactory + DBProvider<Tx: DbTxMut>> Segment<Provider>
for Headers<Provider::Primitives>
{
fn segment(&self) -> PruneSegment {
PruneSegment::Headers
}

View File

@ -5,25 +5,29 @@ use crate::{
use reth_db::transaction::DbTxMut;
use reth_provider::{
errors::provider::ProviderResult, providers::StaticFileProvider, BlockReader, DBProvider,
PruneCheckpointWriter, TransactionsProvider,
PruneCheckpointWriter, StaticFileProviderFactory, TransactionsProvider,
};
use reth_prune_types::{PruneCheckpoint, PruneMode, PrunePurpose, PruneSegment, SegmentOutput};
use reth_static_file_types::StaticFileSegment;
#[derive(Debug)]
pub struct Receipts {
static_file_provider: StaticFileProvider,
pub struct Receipts<N> {
static_file_provider: StaticFileProvider<N>,
}
impl Receipts {
pub const fn new(static_file_provider: StaticFileProvider) -> Self {
impl<N> Receipts<N> {
pub const fn new(static_file_provider: StaticFileProvider<N>) -> Self {
Self { static_file_provider }
}
}
impl<Provider> Segment<Provider> for Receipts
impl<Provider> Segment<Provider> for Receipts<Provider::Primitives>
where
Provider: DBProvider<Tx: DbTxMut> + PruneCheckpointWriter + TransactionsProvider + BlockReader,
Provider: StaticFileProviderFactory
+ DBProvider<Tx: DbTxMut>
+ PruneCheckpointWriter
+ TransactionsProvider
+ BlockReader,
{
fn segment(&self) -> PruneSegment {
PruneSegment::Receipts

View File

@ -4,7 +4,10 @@ use crate::{
PrunerError,
};
use reth_db::{tables, transaction::DbTxMut};
use reth_provider::{providers::StaticFileProvider, BlockReader, DBProvider, TransactionsProvider};
use reth_provider::{
providers::StaticFileProvider, BlockReader, DBProvider, StaticFileProviderFactory,
TransactionsProvider,
};
use reth_prune_types::{
PruneMode, PruneProgress, PrunePurpose, PruneSegment, SegmentOutput, SegmentOutputCheckpoint,
};
@ -12,19 +15,20 @@ use reth_static_file_types::StaticFileSegment;
use tracing::trace;
#[derive(Debug)]
pub struct Transactions {
static_file_provider: StaticFileProvider,
pub struct Transactions<N> {
static_file_provider: StaticFileProvider<N>,
}
impl Transactions {
pub const fn new(static_file_provider: StaticFileProvider) -> Self {
impl<N> Transactions<N> {
pub const fn new(static_file_provider: StaticFileProvider<N>) -> Self {
Self { static_file_provider }
}
}
impl<Provider> Segment<Provider> for Transactions
impl<Provider> Segment<Provider> for Transactions<Provider::Primitives>
where
Provider: DBProvider<Tx: DbTxMut> + TransactionsProvider + BlockReader,
Provider:
DBProvider<Tx: DbTxMut> + TransactionsProvider + BlockReader + StaticFileProviderFactory,
{
fn segment(&self) -> PruneSegment {
PruneSegment::Transactions