mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-04-08 03:01:12 -04:00
feat(storage, mdbx): transaction manager (#6126)
This commit is contained in:
@@ -4,6 +4,7 @@ use crate::dirs::{ChainPath, DataDirPath, MaybePlatformPath};
|
||||
use alloy_chains::Chain;
|
||||
use reth_db::{
|
||||
init_db,
|
||||
mdbx::DatabaseArguments,
|
||||
test_utils::{create_test_rw_db, TempDatabase},
|
||||
DatabaseEnv,
|
||||
};
|
||||
@@ -54,7 +55,10 @@ impl DatabaseBuilder {
|
||||
let db_path = data_dir.db_path();
|
||||
|
||||
tracing::info!(target: "reth::cli", path = ?db_path, "Opening database");
|
||||
let db = Arc::new(init_db(db_path.clone(), log_level)?.with_metrics());
|
||||
let db = Arc::new(
|
||||
init_db(db_path.clone(), DatabaseArguments::default().log_level(log_level))?
|
||||
.with_metrics(),
|
||||
);
|
||||
Ok(DatabaseInstance::Real { db, data_dir })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,12 +15,12 @@ use crate::{
|
||||
dirs::{DataDirPath, PlatformPath},
|
||||
};
|
||||
use reth_db::{
|
||||
cursor::DbCursorRO, database::Database, open_db_read_only, table::Table, transaction::DbTx,
|
||||
AccountChangeSet, AccountHistory, AccountsTrie, BlockBodyIndices, BlockOmmers,
|
||||
BlockWithdrawals, Bytecodes, CanonicalHeaders, DatabaseEnv, HashedAccount, HashedStorage,
|
||||
HeaderNumbers, HeaderTD, Headers, PlainAccountState, PlainStorageState, PruneCheckpoints,
|
||||
Receipts, StorageChangeSet, StorageHistory, StoragesTrie, SyncStage, SyncStageProgress, Tables,
|
||||
TransactionBlock, Transactions, TxHashNumber, TxSenders,
|
||||
cursor::DbCursorRO, database::Database, mdbx::DatabaseArguments, open_db_read_only,
|
||||
table::Table, transaction::DbTx, AccountChangeSet, AccountHistory, AccountsTrie,
|
||||
BlockBodyIndices, BlockOmmers, BlockWithdrawals, Bytecodes, CanonicalHeaders, DatabaseEnv,
|
||||
HashedAccount, HashedStorage, HeaderNumbers, HeaderTD, Headers, PlainAccountState,
|
||||
PlainStorageState, PruneCheckpoints, Receipts, StorageChangeSet, StorageHistory, StoragesTrie,
|
||||
SyncStage, SyncStageProgress, Tables, TransactionBlock, Transactions, TxHashNumber, TxSenders,
|
||||
};
|
||||
use tracing::info;
|
||||
|
||||
@@ -61,7 +61,10 @@ impl Command {
|
||||
pub fn execute(self, tool: &DbTool<'_, DatabaseEnv>) -> eyre::Result<()> {
|
||||
// open second db
|
||||
let second_db_path: PathBuf = self.secondary_datadir.join("db").into();
|
||||
let second_db = open_db_read_only(&second_db_path, self.second_db.log_level)?;
|
||||
let second_db = open_db_read_only(
|
||||
&second_db_path,
|
||||
DatabaseArguments::default().log_level(self.second_db.log_level),
|
||||
)?;
|
||||
|
||||
let tables = match self.table {
|
||||
Some(table) => vec![table],
|
||||
|
||||
@@ -14,7 +14,9 @@ use eyre::WrapErr;
|
||||
use human_bytes::human_bytes;
|
||||
use reth_db::{
|
||||
database::Database,
|
||||
mdbx, open_db, open_db_read_only,
|
||||
mdbx,
|
||||
mdbx::DatabaseArguments,
|
||||
open_db, open_db_read_only,
|
||||
version::{get_db_version, DatabaseVersionError, DB_VERSION},
|
||||
Tables,
|
||||
};
|
||||
@@ -102,7 +104,10 @@ impl Command {
|
||||
match self.command {
|
||||
// TODO: We'll need to add this on the DB trait.
|
||||
Subcommands::Stats { .. } => {
|
||||
let db = open_db_read_only(&db_path, self.db.log_level)?;
|
||||
let db = open_db_read_only(
|
||||
&db_path,
|
||||
DatabaseArguments::default().log_level(self.db.log_level),
|
||||
)?;
|
||||
let tool = DbTool::new(&db, self.chain.clone())?;
|
||||
let mut stats_table = ComfyTable::new();
|
||||
stats_table.load_preset(comfy_table::presets::ASCII_MARKDOWN);
|
||||
@@ -186,17 +191,26 @@ impl Command {
|
||||
println!("{stats_table}");
|
||||
}
|
||||
Subcommands::List(command) => {
|
||||
let db = open_db_read_only(&db_path, self.db.log_level)?;
|
||||
let db = open_db_read_only(
|
||||
&db_path,
|
||||
DatabaseArguments::default().log_level(self.db.log_level),
|
||||
)?;
|
||||
let tool = DbTool::new(&db, self.chain.clone())?;
|
||||
command.execute(&tool)?;
|
||||
}
|
||||
Subcommands::Diff(command) => {
|
||||
let db = open_db_read_only(&db_path, self.db.log_level)?;
|
||||
let db = open_db_read_only(
|
||||
&db_path,
|
||||
DatabaseArguments::default().log_level(self.db.log_level),
|
||||
)?;
|
||||
let tool = DbTool::new(&db, self.chain.clone())?;
|
||||
command.execute(&tool)?;
|
||||
}
|
||||
Subcommands::Get(command) => {
|
||||
let db = open_db_read_only(&db_path, self.db.log_level)?;
|
||||
let db = open_db_read_only(
|
||||
&db_path,
|
||||
DatabaseArguments::default().log_level(self.db.log_level),
|
||||
)?;
|
||||
let tool = DbTool::new(&db, self.chain.clone())?;
|
||||
command.execute(&tool)?;
|
||||
}
|
||||
@@ -216,12 +230,14 @@ impl Command {
|
||||
}
|
||||
}
|
||||
|
||||
let db = open_db(&db_path, self.db.log_level)?;
|
||||
let db =
|
||||
open_db(&db_path, DatabaseArguments::default().log_level(self.db.log_level))?;
|
||||
let mut tool = DbTool::new(&db, self.chain.clone())?;
|
||||
tool.drop(db_path)?;
|
||||
}
|
||||
Subcommands::Clear(command) => {
|
||||
let db = open_db(&db_path, self.db.log_level)?;
|
||||
let db =
|
||||
open_db(&db_path, DatabaseArguments::default().log_level(self.db.log_level))?;
|
||||
command.execute(&db)?;
|
||||
}
|
||||
Subcommands::Snapshot(command) => {
|
||||
|
||||
@@ -3,7 +3,7 @@ use super::{
|
||||
Command,
|
||||
};
|
||||
use rand::{seq::SliceRandom, Rng};
|
||||
use reth_db::{open_db_read_only, snapshot::HeaderMask};
|
||||
use reth_db::{mdbx::DatabaseArguments, open_db_read_only, snapshot::HeaderMask};
|
||||
use reth_interfaces::db::LogLevel;
|
||||
use reth_primitives::{
|
||||
snapshot::{Compression, Filters, InclusionFilter, PerfectHashingFunction},
|
||||
@@ -28,7 +28,9 @@ impl Command {
|
||||
inclusion_filter: InclusionFilter,
|
||||
phf: Option<PerfectHashingFunction>,
|
||||
) -> eyre::Result<()> {
|
||||
let factory = ProviderFactory::new(open_db_read_only(db_path, log_level)?, chain.clone());
|
||||
let db_args = DatabaseArguments::default().log_level(log_level);
|
||||
|
||||
let factory = ProviderFactory::new(open_db_read_only(db_path, db_args)?, chain.clone());
|
||||
let provider = factory.provider()?;
|
||||
let tip = provider.last_block_number()?;
|
||||
let block_range =
|
||||
@@ -43,7 +45,7 @@ impl Command {
|
||||
let mut row_indexes = block_range.clone().collect::<Vec<_>>();
|
||||
let mut rng = rand::thread_rng();
|
||||
|
||||
let tx_range = ProviderFactory::new(open_db_read_only(db_path, log_level)?, chain.clone())
|
||||
let tx_range = ProviderFactory::new(open_db_read_only(db_path, db_args)?, chain.clone())
|
||||
.provider()?
|
||||
.transaction_range_by_block_range(block_range.clone())?;
|
||||
|
||||
@@ -61,7 +63,7 @@ impl Command {
|
||||
for bench_kind in [BenchKind::Walk, BenchKind::RandomAll] {
|
||||
bench(
|
||||
bench_kind,
|
||||
(open_db_read_only(db_path, log_level)?, chain.clone()),
|
||||
(open_db_read_only(db_path, db_args)?, chain.clone()),
|
||||
SnapshotSegment::Headers,
|
||||
filters,
|
||||
compression,
|
||||
@@ -92,7 +94,7 @@ impl Command {
|
||||
let num = row_indexes[rng.gen_range(0..row_indexes.len())];
|
||||
bench(
|
||||
BenchKind::RandomOne,
|
||||
(open_db_read_only(db_path, log_level)?, chain.clone()),
|
||||
(open_db_read_only(db_path, db_args)?, chain.clone()),
|
||||
SnapshotSegment::Headers,
|
||||
filters,
|
||||
compression,
|
||||
@@ -113,14 +115,14 @@ impl Command {
|
||||
{
|
||||
let num = row_indexes[rng.gen_range(0..row_indexes.len())] as u64;
|
||||
let header_hash =
|
||||
ProviderFactory::new(open_db_read_only(db_path, log_level)?, chain.clone())
|
||||
ProviderFactory::new(open_db_read_only(db_path, db_args)?, chain.clone())
|
||||
.header_by_number(num)?
|
||||
.ok_or(ProviderError::HeaderNotFound(num.into()))?
|
||||
.hash_slow();
|
||||
|
||||
bench(
|
||||
BenchKind::RandomHash,
|
||||
(open_db_read_only(db_path, log_level)?, chain.clone()),
|
||||
(open_db_read_only(db_path, db_args)?, chain.clone()),
|
||||
SnapshotSegment::Headers,
|
||||
filters,
|
||||
compression,
|
||||
|
||||
@@ -2,7 +2,11 @@ use clap::{builder::RangedU64ValueParser, Parser};
|
||||
use human_bytes::human_bytes;
|
||||
use itertools::Itertools;
|
||||
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
||||
use reth_db::{database::Database, open_db_read_only, DatabaseEnv};
|
||||
use reth_db::{
|
||||
database::Database,
|
||||
mdbx::{DatabaseArguments, MaxReadTransactionDuration},
|
||||
open_db_read_only, DatabaseEnv,
|
||||
};
|
||||
use reth_interfaces::db::LogLevel;
|
||||
use reth_nippy_jar::{NippyJar, NippyJarCursor};
|
||||
use reth_primitives::{
|
||||
@@ -89,7 +93,11 @@ impl Command {
|
||||
);
|
||||
|
||||
{
|
||||
let db = open_db_read_only(db_path, None)?;
|
||||
let db = open_db_read_only(
|
||||
db_path,
|
||||
DatabaseArguments::default()
|
||||
.max_read_transaction_duration(Some(MaxReadTransactionDuration::Unbounded)),
|
||||
)?;
|
||||
let factory = Arc::new(ProviderFactory::new(db, chain.clone()));
|
||||
|
||||
if !self.only_bench {
|
||||
|
||||
@@ -14,6 +14,7 @@ use reth_provider::{
|
||||
TransactionsProvider, TransactionsProviderExt,
|
||||
};
|
||||
|
||||
use reth_db::mdbx::DatabaseArguments;
|
||||
use std::{
|
||||
path::{Path, PathBuf},
|
||||
sync::Arc,
|
||||
@@ -29,7 +30,9 @@ impl Command {
|
||||
inclusion_filter: InclusionFilter,
|
||||
phf: Option<PerfectHashingFunction>,
|
||||
) -> eyre::Result<()> {
|
||||
let factory = ProviderFactory::new(open_db_read_only(db_path, log_level)?, chain.clone());
|
||||
let db_args = DatabaseArguments::default().log_level(log_level);
|
||||
|
||||
let factory = ProviderFactory::new(open_db_read_only(db_path, db_args)?, chain.clone());
|
||||
let provider = factory.provider()?;
|
||||
let tip = provider.last_block_number()?;
|
||||
let block_range =
|
||||
@@ -43,7 +46,7 @@ impl Command {
|
||||
|
||||
let mut rng = rand::thread_rng();
|
||||
|
||||
let tx_range = ProviderFactory::new(open_db_read_only(db_path, log_level)?, chain.clone())
|
||||
let tx_range = ProviderFactory::new(open_db_read_only(db_path, db_args)?, chain.clone())
|
||||
.provider()?
|
||||
.transaction_range_by_block_range(block_range.clone())?;
|
||||
|
||||
@@ -64,7 +67,7 @@ impl Command {
|
||||
for bench_kind in [BenchKind::Walk, BenchKind::RandomAll] {
|
||||
bench(
|
||||
bench_kind,
|
||||
(open_db_read_only(db_path, log_level)?, chain.clone()),
|
||||
(open_db_read_only(db_path, db_args)?, chain.clone()),
|
||||
SnapshotSegment::Receipts,
|
||||
filters,
|
||||
compression,
|
||||
@@ -95,7 +98,7 @@ impl Command {
|
||||
let num = row_indexes[rng.gen_range(0..row_indexes.len())];
|
||||
bench(
|
||||
BenchKind::RandomOne,
|
||||
(open_db_read_only(db_path, log_level)?, chain.clone()),
|
||||
(open_db_read_only(db_path, db_args)?, chain.clone()),
|
||||
SnapshotSegment::Receipts,
|
||||
filters,
|
||||
compression,
|
||||
@@ -115,15 +118,14 @@ impl Command {
|
||||
// BENCHMARK QUERYING A RANDOM RECEIPT BY HASH
|
||||
{
|
||||
let num = row_indexes[rng.gen_range(0..row_indexes.len())] as u64;
|
||||
let tx_hash =
|
||||
ProviderFactory::new(open_db_read_only(db_path, log_level)?, chain.clone())
|
||||
.transaction_by_id(num)?
|
||||
.ok_or(ProviderError::ReceiptNotFound(num.into()))?
|
||||
.hash();
|
||||
let tx_hash = ProviderFactory::new(open_db_read_only(db_path, db_args)?, chain.clone())
|
||||
.transaction_by_id(num)?
|
||||
.ok_or(ProviderError::ReceiptNotFound(num.into()))?
|
||||
.hash();
|
||||
|
||||
bench(
|
||||
BenchKind::RandomHash,
|
||||
(open_db_read_only(db_path, log_level)?, chain.clone()),
|
||||
(open_db_read_only(db_path, db_args)?, chain.clone()),
|
||||
SnapshotSegment::Receipts,
|
||||
filters,
|
||||
compression,
|
||||
|
||||
@@ -14,6 +14,7 @@ use reth_provider::{
|
||||
TransactionsProvider, TransactionsProviderExt,
|
||||
};
|
||||
|
||||
use reth_db::mdbx::DatabaseArguments;
|
||||
use std::{
|
||||
path::{Path, PathBuf},
|
||||
sync::Arc,
|
||||
@@ -29,7 +30,9 @@ impl Command {
|
||||
inclusion_filter: InclusionFilter,
|
||||
phf: Option<PerfectHashingFunction>,
|
||||
) -> eyre::Result<()> {
|
||||
let factory = ProviderFactory::new(open_db_read_only(db_path, log_level)?, chain.clone());
|
||||
let db_args = DatabaseArguments::default().log_level(log_level);
|
||||
|
||||
let factory = ProviderFactory::new(open_db_read_only(db_path, db_args)?, chain.clone());
|
||||
let provider = factory.provider()?;
|
||||
let tip = provider.last_block_number()?;
|
||||
let block_range =
|
||||
@@ -61,7 +64,7 @@ impl Command {
|
||||
for bench_kind in [BenchKind::Walk, BenchKind::RandomAll] {
|
||||
bench(
|
||||
bench_kind,
|
||||
(open_db_read_only(db_path, log_level)?, chain.clone()),
|
||||
(open_db_read_only(db_path, db_args)?, chain.clone()),
|
||||
SnapshotSegment::Transactions,
|
||||
filters,
|
||||
compression,
|
||||
@@ -93,7 +96,7 @@ impl Command {
|
||||
let num = row_indexes[rng.gen_range(0..row_indexes.len())];
|
||||
bench(
|
||||
BenchKind::RandomOne,
|
||||
(open_db_read_only(db_path, log_level)?, chain.clone()),
|
||||
(open_db_read_only(db_path, db_args)?, chain.clone()),
|
||||
SnapshotSegment::Transactions,
|
||||
filters,
|
||||
compression,
|
||||
@@ -115,14 +118,14 @@ impl Command {
|
||||
{
|
||||
let num = row_indexes[rng.gen_range(0..row_indexes.len())] as u64;
|
||||
let transaction_hash =
|
||||
ProviderFactory::new(open_db_read_only(db_path, log_level)?, chain.clone())
|
||||
ProviderFactory::new(open_db_read_only(db_path, db_args)?, chain.clone())
|
||||
.transaction_by_id(num)?
|
||||
.ok_or(ProviderError::TransactionNotFound(num.into()))?
|
||||
.hash();
|
||||
|
||||
bench(
|
||||
BenchKind::RandomHash,
|
||||
(open_db_read_only(db_path, log_level)?, chain.clone()),
|
||||
(open_db_read_only(db_path, db_args)?, chain.clone()),
|
||||
SnapshotSegment::Transactions,
|
||||
filters,
|
||||
compression,
|
||||
|
||||
@@ -11,7 +11,7 @@ use reth_beacon_consensus::BeaconConsensus;
|
||||
use reth_blockchain_tree::{
|
||||
BlockchainTree, BlockchainTreeConfig, ShareableBlockchainTree, TreeExternals,
|
||||
};
|
||||
use reth_db::{init_db, DatabaseEnv};
|
||||
use reth_db::{init_db, mdbx::DatabaseArguments, DatabaseEnv};
|
||||
use reth_interfaces::{consensus::Consensus, RethResult};
|
||||
use reth_node_api::PayloadBuilderAttributes;
|
||||
use reth_payload_builder::database::CachedReads;
|
||||
@@ -150,7 +150,8 @@ impl Command {
|
||||
fs::create_dir_all(&db_path)?;
|
||||
|
||||
// initialize the database
|
||||
let db = Arc::new(init_db(db_path, self.db.log_level)?);
|
||||
let db =
|
||||
Arc::new(init_db(db_path, DatabaseArguments::default().log_level(self.db.log_level))?);
|
||||
let provider_factory = ProviderFactory::new(Arc::clone(&db), Arc::clone(&self.chain));
|
||||
|
||||
let consensus: Arc<dyn Consensus> = Arc::new(BeaconConsensus::new(Arc::clone(&self.chain)));
|
||||
|
||||
@@ -16,7 +16,7 @@ use clap::Parser;
|
||||
use futures::{stream::select as stream_select, StreamExt};
|
||||
use reth_beacon_consensus::BeaconConsensus;
|
||||
use reth_config::Config;
|
||||
use reth_db::{database::Database, init_db, DatabaseEnv};
|
||||
use reth_db::{database::Database, init_db, mdbx::DatabaseArguments, DatabaseEnv};
|
||||
use reth_downloaders::{
|
||||
bodies::bodies::BodiesDownloaderBuilder,
|
||||
headers::reverse_headers::ReverseHeadersDownloaderBuilder,
|
||||
@@ -204,7 +204,8 @@ impl Command {
|
||||
let data_dir = self.datadir.unwrap_or_chain_default(self.chain.chain);
|
||||
let db_path = data_dir.db_path();
|
||||
fs::create_dir_all(&db_path)?;
|
||||
let db = Arc::new(init_db(db_path, self.db.log_level)?);
|
||||
let db =
|
||||
Arc::new(init_db(db_path, DatabaseArguments::default().log_level(self.db.log_level))?);
|
||||
let provider_factory = ProviderFactory::new(db.clone(), self.chain.clone());
|
||||
|
||||
debug!(target: "reth::cli", chain=%self.chain.chain, genesis=?self.chain.genesis_hash(), "Initializing genesis");
|
||||
|
||||
@@ -13,7 +13,7 @@ use crate::{
|
||||
use backon::{ConstantBuilder, Retryable};
|
||||
use clap::Parser;
|
||||
use reth_config::Config;
|
||||
use reth_db::{init_db, DatabaseEnv};
|
||||
use reth_db::{init_db, mdbx::DatabaseArguments, DatabaseEnv};
|
||||
use reth_interfaces::executor::BlockValidationError;
|
||||
use reth_network::NetworkHandle;
|
||||
use reth_network_api::NetworkInfo;
|
||||
@@ -112,7 +112,8 @@ impl Command {
|
||||
fs::create_dir_all(&db_path)?;
|
||||
|
||||
// initialize the database
|
||||
let db = Arc::new(init_db(db_path, self.db.log_level)?);
|
||||
let db =
|
||||
Arc::new(init_db(db_path, DatabaseArguments::default().log_level(self.db.log_level))?);
|
||||
let factory = ProviderFactory::new(&db, self.chain.clone());
|
||||
let provider = factory.provider()?;
|
||||
|
||||
|
||||
@@ -14,7 +14,9 @@ use backon::{ConstantBuilder, Retryable};
|
||||
use clap::Parser;
|
||||
use reth_beacon_consensus::BeaconConsensus;
|
||||
use reth_config::Config;
|
||||
use reth_db::{cursor::DbCursorRO, init_db, tables, transaction::DbTx, DatabaseEnv};
|
||||
use reth_db::{
|
||||
cursor::DbCursorRO, init_db, mdbx::DatabaseArguments, tables, transaction::DbTx, DatabaseEnv,
|
||||
};
|
||||
use reth_interfaces::{consensus::Consensus, p2p::full_block::FullBlockClient};
|
||||
use reth_network::NetworkHandle;
|
||||
use reth_network_api::NetworkInfo;
|
||||
@@ -121,7 +123,8 @@ impl Command {
|
||||
fs::create_dir_all(&db_path)?;
|
||||
|
||||
// initialize the database
|
||||
let db = Arc::new(init_db(db_path, self.db.log_level)?);
|
||||
let db =
|
||||
Arc::new(init_db(db_path, DatabaseArguments::default().log_level(self.db.log_level))?);
|
||||
let factory = ProviderFactory::new(&db, self.chain.clone());
|
||||
let provider_rw = factory.provider_rw()?;
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ use reth_blockchain_tree::{
|
||||
BlockchainTree, BlockchainTreeConfig, ShareableBlockchainTree, TreeExternals,
|
||||
};
|
||||
use reth_config::Config;
|
||||
use reth_db::{init_db, DatabaseEnv};
|
||||
use reth_db::{init_db, mdbx::DatabaseArguments, DatabaseEnv};
|
||||
use reth_interfaces::consensus::Consensus;
|
||||
use reth_network::NetworkHandle;
|
||||
use reth_network_api::NetworkInfo;
|
||||
@@ -133,7 +133,8 @@ impl Command {
|
||||
fs::create_dir_all(&db_path)?;
|
||||
|
||||
// Initialize the database
|
||||
let db = Arc::new(init_db(db_path, self.db.log_level)?);
|
||||
let db =
|
||||
Arc::new(init_db(db_path, DatabaseArguments::default().log_level(self.db.log_level))?);
|
||||
let provider_factory = ProviderFactory::new(db.clone(), self.chain.clone());
|
||||
|
||||
let consensus: Arc<dyn Consensus> = Arc::new(BeaconConsensus::new(Arc::clone(&self.chain)));
|
||||
|
||||
@@ -10,7 +10,7 @@ use eyre::Context;
|
||||
use futures::{Stream, StreamExt};
|
||||
use reth_beacon_consensus::BeaconConsensus;
|
||||
use reth_config::Config;
|
||||
use reth_db::{database::Database, init_db};
|
||||
use reth_db::{database::Database, init_db, mdbx::DatabaseArguments};
|
||||
use reth_downloaders::{
|
||||
bodies::bodies::BodiesDownloaderBuilder, file_client::FileClient,
|
||||
headers::reverse_headers::ReverseHeadersDownloaderBuilder,
|
||||
@@ -89,7 +89,8 @@ impl ImportCommand {
|
||||
let db_path = data_dir.db_path();
|
||||
|
||||
info!(target: "reth::cli", path = ?db_path, "Opening database");
|
||||
let db = Arc::new(init_db(db_path, self.db.log_level)?);
|
||||
let db =
|
||||
Arc::new(init_db(db_path, DatabaseArguments::default().log_level(self.db.log_level))?);
|
||||
info!(target: "reth::cli", "Database opened");
|
||||
let provider_factory = ProviderFactory::new(db.clone(), self.chain.clone());
|
||||
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
//! Command that initializes the node from a genesis file.
|
||||
|
||||
use crate::init::init_genesis;
|
||||
use clap::Parser;
|
||||
use reth_db::init_db;
|
||||
use reth_primitives::ChainSpec;
|
||||
use std::sync::Arc;
|
||||
use tracing::info;
|
||||
|
||||
use crate::{
|
||||
args::{
|
||||
utils::{chain_help, genesis_value_parser, SUPPORTED_CHAINS},
|
||||
DatabaseArgs,
|
||||
},
|
||||
dirs::{DataDirPath, MaybePlatformPath},
|
||||
init::init_genesis,
|
||||
};
|
||||
use clap::Parser;
|
||||
use reth_db::{init_db, mdbx::DatabaseArguments};
|
||||
use reth_primitives::ChainSpec;
|
||||
use std::sync::Arc;
|
||||
use tracing::info;
|
||||
|
||||
/// Initializes the database with the genesis block.
|
||||
#[derive(Debug, Parser)]
|
||||
@@ -53,7 +52,8 @@ impl InitCommand {
|
||||
let data_dir = self.datadir.unwrap_or_chain_default(self.chain.chain);
|
||||
let db_path = data_dir.db_path();
|
||||
info!(target: "reth::cli", path = ?db_path, "Opening database");
|
||||
let db = Arc::new(init_db(&db_path, self.db.log_level)?);
|
||||
let db =
|
||||
Arc::new(init_db(&db_path, DatabaseArguments::default().log_level(self.db.log_level))?);
|
||||
info!(target: "reth::cli", "Database opened");
|
||||
|
||||
info!(target: "reth::cli", "Writing genesis block");
|
||||
|
||||
@@ -12,7 +12,7 @@ use crate::{
|
||||
use backon::{ConstantBuilder, Retryable};
|
||||
use clap::{Parser, Subcommand};
|
||||
use reth_config::Config;
|
||||
use reth_db::open_db;
|
||||
use reth_db::{mdbx::DatabaseArguments, open_db};
|
||||
use reth_discv4::NatResolver;
|
||||
use reth_interfaces::p2p::bodies::client::BodiesClient;
|
||||
use reth_primitives::{BlockHashOrNumber, ChainSpec, NodeRecord};
|
||||
@@ -100,7 +100,10 @@ impl Command {
|
||||
/// Execute `p2p` command
|
||||
pub async fn execute(&self) -> eyre::Result<()> {
|
||||
let tempdir = tempfile::TempDir::new()?;
|
||||
let noop_db = Arc::new(open_db(&tempdir.into_path(), self.db.log_level)?);
|
||||
let noop_db = Arc::new(open_db(
|
||||
&tempdir.into_path(),
|
||||
DatabaseArguments::default().log_level(self.db.log_level),
|
||||
)?);
|
||||
|
||||
// add network name to data dir
|
||||
let data_dir = self.datadir.unwrap_or_chain_default(self.chain.chain);
|
||||
|
||||
@@ -48,7 +48,7 @@ impl Command {
|
||||
let data_dir = self.datadir.unwrap_or_chain_default(self.chain.chain);
|
||||
let db_path = data_dir.db_path();
|
||||
fs::create_dir_all(&db_path)?;
|
||||
let db = Arc::new(init_db(db_path, None)?);
|
||||
let db = Arc::new(init_db(db_path, Default::default())?);
|
||||
|
||||
debug!(target: "reth::cli", chain=%self.chain.chain, genesis=?self.chain.genesis_hash(), "Initializing genesis");
|
||||
init_genesis(db.clone(), self.chain.clone())?;
|
||||
|
||||
@@ -10,7 +10,9 @@ use crate::{
|
||||
utils::DbTool,
|
||||
};
|
||||
use clap::Parser;
|
||||
use reth_db::{database::Database, open_db, tables, transaction::DbTxMut, DatabaseEnv};
|
||||
use reth_db::{
|
||||
database::Database, mdbx::DatabaseArguments, open_db, tables, transaction::DbTxMut, DatabaseEnv,
|
||||
};
|
||||
use reth_primitives::{fs, stage::StageId, ChainSpec};
|
||||
use std::sync::Arc;
|
||||
use tracing::info;
|
||||
@@ -54,7 +56,8 @@ impl Command {
|
||||
let db_path = data_dir.db_path();
|
||||
fs::create_dir_all(&db_path)?;
|
||||
|
||||
let db = open_db(db_path.as_ref(), self.db.log_level)?;
|
||||
let db =
|
||||
open_db(db_path.as_ref(), DatabaseArguments::default().log_level(self.db.log_level))?;
|
||||
|
||||
let tool = DbTool::new(&db, self.chain.clone())?;
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ use execution::dump_execution_stage;
|
||||
|
||||
mod merkle;
|
||||
use merkle::dump_merkle_stage;
|
||||
use reth_db::mdbx::DatabaseArguments;
|
||||
|
||||
/// `reth dump-stage` command
|
||||
#[derive(Debug, Parser)]
|
||||
@@ -101,7 +102,8 @@ impl Command {
|
||||
let data_dir = self.datadir.unwrap_or_chain_default(self.chain.chain);
|
||||
let db_path = data_dir.db_path();
|
||||
info!(target: "reth::cli", path = ?db_path, "Opening database");
|
||||
let db = Arc::new(init_db(db_path, self.db.log_level)?);
|
||||
let db =
|
||||
Arc::new(init_db(db_path, DatabaseArguments::default().log_level(self.db.log_level))?);
|
||||
info!(target: "reth::cli", "Database opened");
|
||||
|
||||
let tool = DbTool::new(&db, self.chain.clone())?;
|
||||
@@ -137,7 +139,7 @@ pub(crate) fn setup<DB: Database>(
|
||||
|
||||
info!(target: "reth::cli", ?output_db, "Creating separate db");
|
||||
|
||||
let output_db = init_db(output_db, None)?;
|
||||
let output_db = init_db(output_db, Default::default())?;
|
||||
|
||||
output_db.update(|tx| {
|
||||
tx.import_table_with_range::<tables::BlockBodyIndices, _>(
|
||||
|
||||
@@ -15,7 +15,7 @@ use crate::{
|
||||
use clap::Parser;
|
||||
use reth_beacon_consensus::BeaconConsensus;
|
||||
use reth_config::Config;
|
||||
use reth_db::init_db;
|
||||
use reth_db::{init_db, mdbx::DatabaseArguments};
|
||||
use reth_downloaders::bodies::bodies::BodiesDownloaderBuilder;
|
||||
|
||||
use reth_primitives::ChainSpec;
|
||||
@@ -123,7 +123,8 @@ impl Command {
|
||||
let db_path = data_dir.db_path();
|
||||
|
||||
info!(target: "reth::cli", path = ?db_path, "Opening database");
|
||||
let db = Arc::new(init_db(db_path, self.db.log_level)?);
|
||||
let db =
|
||||
Arc::new(init_db(db_path, DatabaseArguments::default().log_level(self.db.log_level))?);
|
||||
info!(target: "reth::cli", "Database opened");
|
||||
|
||||
let factory = ProviderFactory::new(Arc::clone(&db), self.chain.clone());
|
||||
|
||||
@@ -1,11 +1,5 @@
|
||||
//! Unwinding a certain block range
|
||||
|
||||
use clap::{Parser, Subcommand};
|
||||
use reth_db::{cursor::DbCursorRO, database::Database, open_db, tables, transaction::DbTx};
|
||||
use reth_primitives::{BlockHashOrNumber, ChainSpec};
|
||||
use reth_provider::{BlockExecutionWriter, ProviderFactory};
|
||||
use std::{ops::RangeInclusive, sync::Arc};
|
||||
|
||||
use crate::{
|
||||
args::{
|
||||
utils::{chain_help, genesis_value_parser, SUPPORTED_CHAINS},
|
||||
@@ -13,6 +7,15 @@ use crate::{
|
||||
},
|
||||
dirs::{DataDirPath, MaybePlatformPath},
|
||||
};
|
||||
use clap::{Parser, Subcommand};
|
||||
use reth_db::{
|
||||
cursor::DbCursorRO, database::Database, mdbx::DatabaseArguments, open_db, tables,
|
||||
transaction::DbTx,
|
||||
};
|
||||
use reth_primitives::{BlockHashOrNumber, ChainSpec};
|
||||
use reth_provider::{BlockExecutionWriter, ProviderFactory};
|
||||
use std::{ops::RangeInclusive, sync::Arc};
|
||||
|
||||
/// `reth stage unwind` command
|
||||
#[derive(Debug, Parser)]
|
||||
pub struct Command {
|
||||
@@ -56,7 +59,8 @@ impl Command {
|
||||
eyre::bail!("Database {db_path:?} does not exist.")
|
||||
}
|
||||
|
||||
let db = open_db(db_path.as_ref(), self.db.log_level)?;
|
||||
let db =
|
||||
open_db(db_path.as_ref(), DatabaseArguments::default().log_level(self.db.log_level))?;
|
||||
|
||||
let range = self.command.unwind_range(&db)?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user