mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: search for a snapshot that fulfills a queried BlockHash or TxHash (#5373)
Co-authored-by: Alexey Shekhirin <a.shekhirin@gmail.com> Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -10,7 +10,8 @@ use reth_primitives::{
|
||||
BlockHash, ChainSpec, Header, SnapshotSegment,
|
||||
};
|
||||
use reth_provider::{
|
||||
providers::SnapshotProvider, DatabaseProviderRO, HeaderProvider, ProviderError, ProviderFactory,
|
||||
providers::SnapshotProvider, DatabaseProviderRO, HeaderProvider, ProviderError,
|
||||
ProviderFactory, TransactionsProviderExt,
|
||||
};
|
||||
use reth_snapshot::{segments, segments::Segment};
|
||||
use std::{
|
||||
@ -38,9 +39,15 @@ impl Command {
|
||||
segment.snapshot::<DB>(provider, PathBuf::default(), range.clone())?;
|
||||
|
||||
// Default name doesn't have any configuration
|
||||
let tx_range = provider.transaction_range_by_block_range(range.clone())?;
|
||||
reth_primitives::fs::rename(
|
||||
SnapshotSegment::Headers.filename(&range),
|
||||
SnapshotSegment::Headers.filename_with_configuration(filters, compression, &range),
|
||||
SnapshotSegment::Headers.filename(&range, &tx_range),
|
||||
SnapshotSegment::Headers.filename_with_configuration(
|
||||
filters,
|
||||
compression,
|
||||
&range,
|
||||
&tx_range,
|
||||
),
|
||||
)?;
|
||||
|
||||
Ok(())
|
||||
@ -61,16 +68,24 @@ impl Command {
|
||||
Filters::WithoutFilters
|
||||
};
|
||||
|
||||
let range = self.block_range();
|
||||
let block_range = self.block_range();
|
||||
|
||||
let mut row_indexes = range.clone().collect::<Vec<_>>();
|
||||
let mut row_indexes = block_range.clone().collect::<Vec<_>>();
|
||||
let mut rng = rand::thread_rng();
|
||||
let path = SnapshotSegment::Headers
|
||||
.filename_with_configuration(filters, compression, &range)
|
||||
|
||||
let tx_range = ProviderFactory::new(open_db_read_only(db_path, log_level)?, chain.clone())
|
||||
.provider()?
|
||||
.transaction_range_by_block_range(block_range.clone())?;
|
||||
|
||||
let path: PathBuf = SnapshotSegment::Headers
|
||||
.filename_with_configuration(filters, compression, &block_range, &tx_range)
|
||||
.into();
|
||||
let provider = SnapshotProvider::default();
|
||||
let jar_provider =
|
||||
provider.get_segment_provider(SnapshotSegment::Headers, self.from, Some(path))?;
|
||||
let jar_provider = provider.get_segment_provider_from_block(
|
||||
SnapshotSegment::Headers,
|
||||
self.from,
|
||||
Some(&path),
|
||||
)?;
|
||||
let mut cursor = jar_provider.cursor()?;
|
||||
|
||||
for bench_kind in [BenchKind::Walk, BenchKind::RandomAll] {
|
||||
|
||||
@ -27,21 +27,26 @@ impl Command {
|
||||
inclusion_filter: InclusionFilter,
|
||||
phf: PerfectHashingFunction,
|
||||
) -> eyre::Result<()> {
|
||||
let range = self.block_range();
|
||||
let block_range = self.block_range();
|
||||
let filters = if self.with_filters {
|
||||
Filters::WithFilters(inclusion_filter, phf)
|
||||
} else {
|
||||
Filters::WithoutFilters
|
||||
};
|
||||
|
||||
let segment = segments::Receipts::new(compression, filters);
|
||||
|
||||
segment.snapshot::<DB>(provider, PathBuf::default(), range.clone())?;
|
||||
let segment: segments::Receipts = segments::Receipts::new(compression, filters);
|
||||
segment.snapshot::<DB>(provider, PathBuf::default(), block_range.clone())?;
|
||||
|
||||
// Default name doesn't have any configuration
|
||||
let tx_range = provider.transaction_range_by_block_range(block_range.clone())?;
|
||||
reth_primitives::fs::rename(
|
||||
SnapshotSegment::Receipts.filename(&range),
|
||||
SnapshotSegment::Receipts.filename_with_configuration(filters, compression, &range),
|
||||
SnapshotSegment::Receipts.filename(&block_range, &tx_range),
|
||||
SnapshotSegment::Receipts.filename_with_configuration(
|
||||
filters,
|
||||
compression,
|
||||
&block_range,
|
||||
&tx_range,
|
||||
),
|
||||
)?;
|
||||
|
||||
Ok(())
|
||||
@ -62,7 +67,7 @@ impl Command {
|
||||
Filters::WithoutFilters
|
||||
};
|
||||
|
||||
let block_range = self.from..=(self.from + self.block_interval - 1);
|
||||
let block_range = self.block_range();
|
||||
|
||||
let mut rng = rand::thread_rng();
|
||||
|
||||
@ -72,13 +77,16 @@ impl Command {
|
||||
|
||||
let mut row_indexes = tx_range.clone().collect::<Vec<_>>();
|
||||
|
||||
let path = SnapshotSegment::Receipts
|
||||
.filename_with_configuration(filters, compression, &block_range)
|
||||
let path: PathBuf = SnapshotSegment::Receipts
|
||||
.filename_with_configuration(filters, compression, &block_range, &tx_range)
|
||||
.into();
|
||||
|
||||
let provider = SnapshotProvider::default();
|
||||
let jar_provider =
|
||||
provider.get_segment_provider(SnapshotSegment::Receipts, self.from, Some(path))?;
|
||||
let jar_provider = provider.get_segment_provider_from_block(
|
||||
SnapshotSegment::Receipts,
|
||||
self.from,
|
||||
Some(&path),
|
||||
)?;
|
||||
let mut cursor = jar_provider.cursor()?;
|
||||
|
||||
for bench_kind in [BenchKind::Walk, BenchKind::RandomAll] {
|
||||
|
||||
@ -27,7 +27,7 @@ impl Command {
|
||||
inclusion_filter: InclusionFilter,
|
||||
phf: PerfectHashingFunction,
|
||||
) -> eyre::Result<()> {
|
||||
let range = self.block_range();
|
||||
let block_range = self.block_range();
|
||||
let filters = if self.with_filters {
|
||||
Filters::WithFilters(inclusion_filter, phf)
|
||||
} else {
|
||||
@ -36,12 +36,18 @@ impl Command {
|
||||
|
||||
let segment = segments::Transactions::new(compression, filters);
|
||||
|
||||
segment.snapshot::<DB>(provider, PathBuf::default(), range.clone())?;
|
||||
segment.snapshot::<DB>(provider, PathBuf::default(), block_range.clone())?;
|
||||
|
||||
// Default name doesn't have any configuration
|
||||
let tx_range = provider.transaction_range_by_block_range(block_range.clone())?;
|
||||
reth_primitives::fs::rename(
|
||||
SnapshotSegment::Transactions.filename(&range),
|
||||
SnapshotSegment::Transactions.filename_with_configuration(filters, compression, &range),
|
||||
SnapshotSegment::Transactions.filename(&block_range, &tx_range),
|
||||
SnapshotSegment::Transactions.filename_with_configuration(
|
||||
filters,
|
||||
compression,
|
||||
&block_range,
|
||||
&tx_range,
|
||||
),
|
||||
)?;
|
||||
|
||||
Ok(())
|
||||
@ -62,7 +68,7 @@ impl Command {
|
||||
Filters::WithoutFilters
|
||||
};
|
||||
|
||||
let block_range = self.from..=(self.from + self.block_interval - 1);
|
||||
let block_range = self.block_range();
|
||||
|
||||
let mut rng = rand::thread_rng();
|
||||
|
||||
@ -72,12 +78,15 @@ impl Command {
|
||||
|
||||
let mut row_indexes = tx_range.clone().collect::<Vec<_>>();
|
||||
|
||||
let path = SnapshotSegment::Transactions
|
||||
.filename_with_configuration(filters, compression, &block_range)
|
||||
let path: PathBuf = SnapshotSegment::Transactions
|
||||
.filename_with_configuration(filters, compression, &block_range, &tx_range)
|
||||
.into();
|
||||
let provider = SnapshotProvider::default();
|
||||
let jar_provider =
|
||||
provider.get_segment_provider(SnapshotSegment::Transactions, self.from, Some(path))?;
|
||||
let jar_provider = provider.get_segment_provider_from_block(
|
||||
SnapshotSegment::Transactions,
|
||||
self.from,
|
||||
Some(&path),
|
||||
)?;
|
||||
let mut cursor = jar_provider.cursor()?;
|
||||
|
||||
for bench_kind in [BenchKind::Walk, BenchKind::RandomAll] {
|
||||
|
||||
Reference in New Issue
Block a user