Skip to content

Commit

Permalink
feat(bin, storage): configurable MDBX log level (paradigmxyz#3524)
Browse files Browse the repository at this point in the history
Co-authored-by: Georgios Konstantopoulos <[email protected]>
  • Loading branch information
shekhirin and gakonst authored Jul 3, 2023
1 parent 4d3ce34 commit 770652a
Show file tree
Hide file tree
Showing 28 changed files with 215 additions and 86 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion bin/reth/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ reth-revm = { path = "../../crates/revm" }
reth-revm-inspectors = { path = "../../crates/revm/revm-inspectors" }
reth-staged-sync = { path = "../../crates/staged-sync" }
reth-stages = { path = "../../crates/stages" }
reth-interfaces = { workspace = true, features = ["test-utils"] }
reth-interfaces = { workspace = true, features = ["test-utils", "clap"] }
reth-transaction-pool = { workspace = true }
reth-beacon-consensus = { path = "../../crates/consensus/beacon" }
reth-auto-seal-consensus = { path = "../../crates/consensus/auto-seal" }
Expand Down
13 changes: 13 additions & 0 deletions bin/reth/src/args/database_args.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//! clap [Args](clap::Args) for database configuration
use clap::Args;
use reth_interfaces::db::LogLevel;

/// Parameters for database configuration
#[derive(Debug, Args, PartialEq, Default, Clone, Copy)]
#[command(next_help_heading = "Database")]
pub struct DatabaseArgs {
/// Database logging level. Levels higher than "notice" require a debug build.
#[arg(long = "db.log-level", value_enum)]
pub log_level: Option<LogLevel>,
}
2 changes: 1 addition & 1 deletion bin/reth/src/args/debug_args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use reth_primitives::{TxHash, H256};

/// Parameters for debugging purposes
#[derive(Debug, Args, PartialEq, Default)]
#[command(next_help_heading = "Rpc")]
#[command(next_help_heading = "Debug")]
pub struct DebugArgs {
/// Prompt the downloader to download blocks one at a time.
///
Expand Down
2 changes: 1 addition & 1 deletion bin/reth/src/args/gas_price_oracle_args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use clap::Args;

/// Parameters to configure Gas Price Oracle
#[derive(Debug, Args, PartialEq, Eq, Default)]
#[command(next_help_heading = "GAS PRICE ORACLE")]
#[command(next_help_heading = "Gas Price Oracle")]
pub struct GasPriceOracleArgs {
/// Number of recent blocks to check for gas price
#[arg(long = "gpo.blocks", default_value = "20")]
Expand Down
4 changes: 4 additions & 0 deletions bin/reth/src/args/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ pub use rpc_server_args::RpcServerArgs;
mod debug_args;
pub use debug_args::DebugArgs;

/// DatabaseArgs struct for configuring the database
mod database_args;
pub use database_args::DatabaseArgs;

mod secret_key;
pub use secret_key::{get_secret_key, SecretKeyError};

Expand Down
7 changes: 5 additions & 2 deletions bin/reth/src/chain/import.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use futures::{Stream, StreamExt};
use reth_beacon_consensus::BeaconConsensus;
use reth_provider::{ProviderFactory, StageCheckpointReader};

use crate::args::utils::genesis_value_parser;
use crate::args::{utils::genesis_value_parser, DatabaseArgs};
use reth_config::Config;
use reth_db::{database::Database, init_db};
use reth_downloaders::{
Expand Down Expand Up @@ -64,6 +64,9 @@ pub struct ImportCommand {
)]
chain: Arc<ChainSpec>,

#[clap(flatten)]
db: DatabaseArgs,

/// The path to a block file for import.
///
/// The online stages (headers and bodies) are replaced by a file import, after which the
Expand All @@ -87,7 +90,7 @@ 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)?);
let db = Arc::new(init_db(db_path, self.db.log_level)?);
info!(target: "reth::cli", "Database opened");

debug!(target: "reth::cli", chain=%self.chain.chain, genesis=?self.chain.genesis_hash(), "Initializing genesis");
Expand Down
7 changes: 5 additions & 2 deletions bin/reth/src/chain/init.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::{
args::utils::genesis_value_parser,
args::{utils::genesis_value_parser, DatabaseArgs},
dirs::{DataDirPath, MaybePlatformPath},
};
use clap::Parser;
Expand Down Expand Up @@ -38,6 +38,9 @@ pub struct InitCommand {
value_parser = genesis_value_parser
)]
chain: Arc<ChainSpec>,

#[clap(flatten)]
db: DatabaseArgs,
}

impl InitCommand {
Expand All @@ -49,7 +52,7 @@ 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)?);
let db = Arc::new(init_db(&db_path, self.db.log_level)?);
info!(target: "reth::cli", "Database opened");

info!(target: "reth::cli", "Writing genesis block");
Expand Down
13 changes: 8 additions & 5 deletions bin/reth/src/db/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Database debugging tool
use crate::{
args::utils::genesis_value_parser,
args::{utils::genesis_value_parser, DatabaseArgs},
dirs::{DataDirPath, MaybePlatformPath},
utils::DbTool,
};
Expand Down Expand Up @@ -53,6 +53,9 @@ pub struct Command {
)]
chain: Arc<ChainSpec>,

#[clap(flatten)]
db: DatabaseArgs,

#[clap(subcommand)]
command: Subcommands,
}
Expand Down Expand Up @@ -84,7 +87,7 @@ 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)?;
let db = open_db_read_only(&db_path, 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);
Expand Down Expand Up @@ -135,17 +138,17 @@ impl Command {
println!("{stats_table}");
}
Subcommands::List(command) => {
let db = open_db_read_only(&db_path)?;
let db = open_db_read_only(&db_path, 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)?;
let db = open_db_read_only(&db_path, self.db.log_level)?;
let tool = DbTool::new(&db, self.chain.clone())?;
command.execute(&tool)?;
}
Subcommands::Drop => {
let db = open_db(&db_path)?;
let db = open_db(&db_path, self.db.log_level)?;
let mut tool = DbTool::new(&db, self.chain.clone())?;
tool.drop(db_path)?;
}
Expand Down
7 changes: 5 additions & 2 deletions bin/reth/src/debug_cmd/execution.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Command for debugging execution.
use crate::{
args::{get_secret_key, utils::genesis_value_parser, NetworkArgs},
args::{get_secret_key, utils::genesis_value_parser, DatabaseArgs, NetworkArgs},
dirs::{DataDirPath, MaybePlatformPath},
node::events,
runner::CliContext,
Expand Down Expand Up @@ -75,6 +75,9 @@ pub struct Command {
#[clap(flatten)]
network: NetworkArgs,

#[clap(flatten)]
db: DatabaseArgs,

/// Set the chain tip manually for testing purposes.
///
/// NOTE: This is a temporary flag
Expand Down Expand Up @@ -201,7 +204,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)?);
let db = Arc::new(init_db(db_path, self.db.log_level)?);

debug!(target: "reth::cli", chain=%self.chain.chain, genesis=?self.chain.genesis_hash(), "Initializing genesis");
init_genesis(db.clone(), self.chain.clone())?;
Expand Down
7 changes: 5 additions & 2 deletions bin/reth/src/debug_cmd/merkle.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Command for debugging merkle trie calculation.
use crate::{
args::utils::genesis_value_parser,
args::{utils::genesis_value_parser, DatabaseArgs},
dirs::{DataDirPath, MaybePlatformPath},
};
use clap::Parser;
Expand Down Expand Up @@ -50,6 +50,9 @@ pub struct Command {
)]
chain: Arc<ChainSpec>,

#[clap(flatten)]
db: DatabaseArgs,

/// The height to finish at
#[arg(long)]
to: u64,
Expand All @@ -67,7 +70,7 @@ impl Command {
let db_path = data_dir.db_path();
fs::create_dir_all(&db_path)?;

let db = Arc::new(init_db(db_path)?);
let db = Arc::new(init_db(db_path, self.db.log_level)?);
let factory = ProviderFactory::new(&db, self.chain.clone());
let provider_rw = factory.provider_rw().map_err(PipelineError::Interface)?;

Expand Down
7 changes: 5 additions & 2 deletions bin/reth/src/node/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ use tracing::*;
use crate::{
args::{
utils::{genesis_value_parser, parse_socket_address},
PayloadBuilderArgs,
DatabaseArgs, PayloadBuilderArgs,
},
dirs::MaybePlatformPath,
node::cl_events::ConsensusLayerHealthEvents,
Expand Down Expand Up @@ -138,6 +138,9 @@ pub struct Command {
#[clap(flatten)]
debug: DebugArgs,

#[clap(flatten)]
db: DatabaseArgs,

/// Automatically mine blocks for new transactions
#[arg(long)]
auto_mine: bool,
Expand All @@ -163,7 +166,7 @@ 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)?);
let db = Arc::new(init_db(&db_path, self.db.log_level)?);
info!(target: "reth::cli", "Database opened");

self.start_metrics_endpoint(Arc::clone(&db)).await?;
Expand Down
13 changes: 8 additions & 5 deletions bin/reth/src/p2p/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::{
args::{
get_secret_key,
utils::{chain_spec_value_parser, hash_or_num_value_parser},
DiscoveryArgs,
DatabaseArgs, DiscoveryArgs,
},
dirs::{DataDirPath, MaybePlatformPath},
utils::get_single_header,
Expand Down Expand Up @@ -74,11 +74,14 @@ pub struct Command {
#[arg(long, default_value = "5")]
retries: usize,

#[clap(subcommand)]
command: Subcommands,

#[arg(long, default_value = "any")]
nat: NatResolver,

#[clap(flatten)]
db: DatabaseArgs,

#[clap(subcommand)]
command: Subcommands,
}

#[derive(Subcommand, Debug)]
Expand All @@ -101,7 +104,7 @@ 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())?);
let noop_db = Arc::new(open_db(&tempdir.into_path(), self.db.log_level)?);

// add network name to data dir
let data_dir = self.datadir.unwrap_or_chain_default(self.chain.chain);
Expand Down
17 changes: 10 additions & 7 deletions bin/reth/src/stage/drop.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Database debugging tool
use crate::{
args::{utils::genesis_value_parser, StageEnum},
args::{utils::genesis_value_parser, DatabaseArgs, StageEnum},
dirs::{DataDirPath, MaybePlatformPath},
utils::DbTool,
};
Expand Down Expand Up @@ -33,14 +33,17 @@ pub struct Command {
/// - goerli
/// - sepolia
#[arg(
long,
value_name = "CHAIN_OR_PATH",
verbatim_doc_comment,
default_value = "mainnet",
value_parser = genesis_value_parser
long,
value_name = "CHAIN_OR_PATH",
verbatim_doc_comment,
default_value = "mainnet",
value_parser = genesis_value_parser
)]
chain: Arc<ChainSpec>,

#[clap(flatten)]
db: DatabaseArgs,

stage: StageEnum,
}

Expand All @@ -52,7 +55,7 @@ impl Command {
let db_path = data_dir.db_path();
fs::create_dir_all(&db_path)?;

let db = open_db(db_path.as_ref())?;
let db = open_db(db_path.as_ref(), self.db.log_level)?;

let tool = DbTool::new(&db, self.chain.clone())?;

Expand Down
9 changes: 6 additions & 3 deletions bin/reth/src/stage/dump/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ mod execution;
use execution::dump_execution_stage;

mod merkle;
use crate::args::utils::genesis_value_parser;
use crate::args::{utils::genesis_value_parser, DatabaseArgs};
use merkle::dump_merkle_stage;

/// `reth dump-stage` command
Expand Down Expand Up @@ -55,6 +55,9 @@ pub struct Command {
)]
chain: Arc<ChainSpec>,

#[clap(flatten)]
db: DatabaseArgs,

#[clap(subcommand)]
command: Stages,
}
Expand Down Expand Up @@ -98,7 +101,7 @@ 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)?);
let db = Arc::new(init_db(db_path, self.db.log_level)?);
info!(target: "reth::cli", "Database opened");

let mut tool = DbTool::new(&db, self.chain.clone())?;
Expand Down Expand Up @@ -134,7 +137,7 @@ pub(crate) fn setup<DB: Database>(

info!(target: "reth::cli", ?output_db, "Creating separate db");

let output_db = init_db(output_db)?;
let output_db = init_db(output_db, None)?;

output_db.update(|tx| {
tx.import_table_with_range::<tables::BlockBodyIndices, _>(
Expand Down
7 changes: 5 additions & 2 deletions bin/reth/src/stage/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//!
//! Stage debugging tool
use crate::{
args::{get_secret_key, utils::chain_spec_value_parser, NetworkArgs, StageEnum},
args::{get_secret_key, utils::chain_spec_value_parser, DatabaseArgs, NetworkArgs, StageEnum},
dirs::{DataDirPath, MaybePlatformPath},
prometheus_exporter,
version::SHORT_VERSION,
Expand Down Expand Up @@ -92,6 +92,9 @@ pub struct Command {
#[clap(flatten)]
network: NetworkArgs,

#[clap(flatten)]
db: DatabaseArgs,

/// Commits the changes in the database. WARNING: potentially destructive.
///
/// Useful when you want to run diagnostics on the database.
Expand Down Expand Up @@ -119,7 +122,7 @@ 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)?);
let db = Arc::new(init_db(db_path, self.db.log_level)?);
info!(target: "reth::cli", "Database opened");

let factory = ProviderFactory::new(&db, self.chain.clone());
Expand Down
Loading

0 comments on commit 770652a

Please sign in to comment.