refactor: don't reference StaticFileProvider in static_file::Segment (#12558)

This commit is contained in:
Arsenii Kulikov
2024-11-15 02:07:57 +04:00
committed by GitHub
parent d8af28bbfa
commit d028c1cbb4
7 changed files with 36 additions and 29 deletions

View File

@ -2,10 +2,7 @@ use crate::segments::Segment;
use alloy_primitives::BlockNumber;
use reth_db::tables;
use reth_db_api::{cursor::DbCursorRO, transaction::DbTx};
use reth_provider::{
providers::{StaticFileProvider, StaticFileWriter},
DBProvider,
};
use reth_provider::{providers::StaticFileWriter, DBProvider, StaticFileProviderFactory};
use reth_static_file_types::StaticFileSegment;
use reth_storage_errors::provider::ProviderResult;
use std::ops::RangeInclusive;
@ -14,7 +11,7 @@ use std::ops::RangeInclusive;
#[derive(Debug, Default)]
pub struct Headers;
impl<Provider: DBProvider> Segment<Provider> for Headers {
impl<Provider: StaticFileProviderFactory + DBProvider> Segment<Provider> for Headers {
fn segment(&self) -> StaticFileSegment {
StaticFileSegment::Headers
}
@ -22,9 +19,9 @@ impl<Provider: DBProvider> Segment<Provider> for Headers {
fn copy_to_static_files(
&self,
provider: Provider,
static_file_provider: StaticFileProvider,
block_range: RangeInclusive<BlockNumber>,
) -> ProviderResult<()> {
let static_file_provider = provider.static_file_provider();
let mut static_file_writer =
static_file_provider.get_writer(*block_range.start(), StaticFileSegment::Headers)?;

View File

@ -10,22 +10,22 @@ mod receipts;
pub use receipts::Receipts;
use alloy_primitives::BlockNumber;
use reth_provider::providers::StaticFileProvider;
use reth_provider::StaticFileProviderFactory;
use reth_static_file_types::StaticFileSegment;
use reth_storage_errors::provider::ProviderResult;
use std::ops::RangeInclusive;
/// A segment represents moving some portion of the data to static files.
pub trait Segment<Provider>: Send + Sync {
pub trait Segment<Provider: StaticFileProviderFactory>: Send + Sync {
/// Returns the [`StaticFileSegment`].
fn segment(&self) -> StaticFileSegment;
/// Move data to static files for the provided block range. [`StaticFileProvider`] will handle
/// Move data to static files for the provided block range.
/// [`StaticFileProvider`](reth_provider::providers::StaticFileProvider) will handle
/// the management of and writing to files.
fn copy_to_static_files(
&self,
provider: Provider,
static_file_provider: StaticFileProvider,
block_range: RangeInclusive<BlockNumber>,
) -> ProviderResult<()>;
}

View File

@ -3,8 +3,7 @@ use alloy_primitives::BlockNumber;
use reth_db::tables;
use reth_db_api::{cursor::DbCursorRO, transaction::DbTx};
use reth_provider::{
providers::{StaticFileProvider, StaticFileWriter},
BlockReader, DBProvider,
providers::StaticFileWriter, BlockReader, DBProvider, StaticFileProviderFactory,
};
use reth_static_file_types::StaticFileSegment;
use reth_storage_errors::provider::{ProviderError, ProviderResult};
@ -14,7 +13,9 @@ use std::ops::RangeInclusive;
#[derive(Debug, Default)]
pub struct Receipts;
impl<Provider: DBProvider + BlockReader> Segment<Provider> for Receipts {
impl<Provider: StaticFileProviderFactory + DBProvider + BlockReader> Segment<Provider>
for Receipts
{
fn segment(&self) -> StaticFileSegment {
StaticFileSegment::Receipts
}
@ -22,9 +23,9 @@ impl<Provider: DBProvider + BlockReader> Segment<Provider> for Receipts {
fn copy_to_static_files(
&self,
provider: Provider,
static_file_provider: StaticFileProvider,
block_range: RangeInclusive<BlockNumber>,
) -> ProviderResult<()> {
let static_file_provider = provider.static_file_provider();
let mut static_file_writer =
static_file_provider.get_writer(*block_range.start(), StaticFileSegment::Receipts)?;

View File

@ -3,8 +3,7 @@ use alloy_primitives::BlockNumber;
use reth_db::tables;
use reth_db_api::{cursor::DbCursorRO, transaction::DbTx};
use reth_provider::{
providers::{StaticFileProvider, StaticFileWriter},
BlockReader, DBProvider,
providers::StaticFileWriter, BlockReader, DBProvider, StaticFileProviderFactory,
};
use reth_static_file_types::StaticFileSegment;
use reth_storage_errors::provider::{ProviderError, ProviderResult};
@ -14,7 +13,9 @@ use std::ops::RangeInclusive;
#[derive(Debug, Default)]
pub struct Transactions;
impl<Provider: DBProvider + BlockReader> Segment<Provider> for Transactions {
impl<Provider: StaticFileProviderFactory + DBProvider + BlockReader> Segment<Provider>
for Transactions
{
fn segment(&self) -> StaticFileSegment {
StaticFileSegment::Transactions
}
@ -24,9 +25,9 @@ impl<Provider: DBProvider + BlockReader> Segment<Provider> for Transactions {
fn copy_to_static_files(
&self,
provider: Provider,
static_file_provider: StaticFileProvider,
block_range: RangeInclusive<BlockNumber>,
) -> ProviderResult<()> {
let static_file_provider = provider.static_file_provider();
let mut static_file_writer = static_file_provider
.get_writer(*block_range.start(), StaticFileSegment::Transactions)?;

View File

@ -85,7 +85,9 @@ where
impl<Provider> StaticFileProducerInner<Provider>
where
Provider: StaticFileProviderFactory
+ DatabaseProviderFactory<Provider: StageCheckpointReader + BlockReader>,
+ DatabaseProviderFactory<
Provider: StaticFileProviderFactory + StageCheckpointReader + BlockReader,
>,
{
/// Listen for events on the `static_file_producer`.
pub fn events(&self) -> EventStream<StaticFileProducerEvent> {
@ -136,7 +138,7 @@ where
// Create a new database transaction on every segment to prevent long-lived read-only
// transactions
let provider = self.provider.database_provider_ro()?.disable_long_read_transaction_safety();
segment.copy_to_static_files(provider, self.provider.static_file_provider(), block_range.clone())?;
segment.copy_to_static_files(provider, block_range.clone())?;
let elapsed = start.elapsed(); // TODO(alexey): track in metrics
debug!(target: "static_file", segment = %segment.segment(), ?block_range, ?elapsed, "Finished StaticFileProducer segment");