Skip to content

Commit

Permalink
feat: DatabaseProvider delegates to SnapshotProvider on different…
Browse files Browse the repository at this point in the history
… providers

Co-authored-by: Alexey Shekhirin <[email protected]>
  • Loading branch information
joshieDo and shekhirin authored Dec 15, 2023
1 parent 0dffeb8 commit 31d8ab6
Show file tree
Hide file tree
Showing 15 changed files with 695 additions and 175 deletions.
2 changes: 1 addition & 1 deletion bin/reth/src/db/snapshots/headers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ impl Command {
let path: PathBuf = SnapshotSegment::Headers
.filename_with_configuration(filters, compression, &block_range, &tx_range)
.into();
let provider = SnapshotProvider::default();
let provider = SnapshotProvider::new(PathBuf::default())?;
let jar_provider = provider.get_segment_provider_from_block(
SnapshotSegment::Headers,
self.from,
Expand Down
2 changes: 1 addition & 1 deletion bin/reth/src/db/snapshots/receipts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ impl Command {
.filename_with_configuration(filters, compression, &block_range, &tx_range)
.into();

let provider = SnapshotProvider::default();
let provider = SnapshotProvider::new(PathBuf::default())?;
let jar_provider = provider.get_segment_provider_from_block(
SnapshotSegment::Receipts,
self.from,
Expand Down
2 changes: 1 addition & 1 deletion bin/reth/src/db/snapshots/transactions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ impl Command {
let path: PathBuf = SnapshotSegment::Transactions
.filename_with_configuration(filters, compression, &block_range, &tx_range)
.into();
let provider = SnapshotProvider::default();
let provider = SnapshotProvider::new(PathBuf::default())?;
let jar_provider = provider.get_segment_provider_from_block(
SnapshotSegment::Transactions,
self.from,
Expand Down
2 changes: 1 addition & 1 deletion bin/reth/src/node/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ impl<Ext: RethCliExt> NodeCommand<Ext> {
)?;

provider_factory = provider_factory
.with_snapshots(data_dir.snapshots_path(), snapshotter.highest_snapshot_receiver());
.with_snapshots(data_dir.snapshots_path(), snapshotter.highest_snapshot_receiver())?;

self.start_metrics_endpoint(prometheus_handle, Arc::clone(&db)).await?;

Expand Down
9 changes: 9 additions & 0 deletions crates/interfaces/src/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ pub enum ProviderError {
/// Database error.
#[error(transparent)]
Database(#[from] crate::db::DatabaseError),
/// Filesystem path error.
#[error("{0}")]
FsPathError(String),
/// Nippy jar error.
#[error("nippy jar error: {0}")]
NippyJar(String),
Expand Down Expand Up @@ -127,6 +130,12 @@ impl From<reth_nippy_jar::NippyJarError> for ProviderError {
}
}

impl From<reth_primitives::fs::FsPathError> for ProviderError {
fn from(err: reth_primitives::fs::FsPathError) -> Self {
ProviderError::FsPathError(err.to_string())
}
}

/// A root mismatch error at a given block height.
#[derive(Clone, Debug, Error, PartialEq, Eq)]
#[error("root mismatch at #{block_number} ({block_hash}): {root}")]
Expand Down
16 changes: 16 additions & 0 deletions crates/storage/provider/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,19 @@ pub use chain::{Chain, DisplayBlocksChain};

pub mod bundle_state;
pub use bundle_state::{BundleStateWithReceipts, OriginalValuesKnown, StateChanges, StateReverts};

pub(crate) fn to_range<R: std::ops::RangeBounds<u64>>(bounds: R) -> std::ops::Range<u64> {
let start = match bounds.start_bound() {
std::ops::Bound::Included(&v) => v,
std::ops::Bound::Excluded(&v) => v + 1,
std::ops::Bound::Unbounded => 0,
};

let end = match bounds.end_bound() {
std::ops::Bound::Included(&v) => v + 1,
std::ops::Bound::Excluded(&v) => v,
std::ops::Bound::Unbounded => u64::MAX,
};

start..end
}
13 changes: 10 additions & 3 deletions crates/storage/provider/src/providers/database/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,12 @@ impl<DB> ProviderFactory<DB> {
mut self,
snapshots_path: PathBuf,
highest_snapshot_tracker: watch::Receiver<Option<HighestSnapshots>>,
) -> Self {
) -> ProviderResult<Self> {
self.snapshot_provider = Some(Arc::new(
SnapshotProvider::new(snapshots_path)
SnapshotProvider::new(snapshots_path)?
.with_highest_tracker(Some(highest_snapshot_tracker)),
));
self
Ok(self)
}

/// Returns reference to the underlying database.
Expand Down Expand Up @@ -401,6 +401,13 @@ impl<DB: Database> ReceiptProvider for ProviderFactory<DB> {
fn receipts_by_block(&self, block: BlockHashOrNumber) -> ProviderResult<Option<Vec<Receipt>>> {
self.provider()?.receipts_by_block(block)
}

fn receipts_by_tx_range(
&self,
range: impl RangeBounds<TxNumber>,
) -> ProviderResult<Vec<Receipt>> {
self.provider()?.receipts_by_tx_range(range)
}
}

impl<DB: Database> WithdrawalsProvider for ProviderFactory<DB> {
Expand Down
Loading

0 comments on commit 31d8ab6

Please sign in to comment.