mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-02-19 03:04:27 -05:00
feat(engine): add CLI args for sparse trie pruning configuration (#21703)
This commit is contained in:
@@ -528,8 +528,12 @@ impl TreeConfig {
|
||||
}
|
||||
|
||||
/// Setter for the number of storage proof worker threads.
|
||||
pub fn with_storage_worker_count(mut self, storage_worker_count: usize) -> Self {
|
||||
self.storage_worker_count = storage_worker_count.max(MIN_WORKER_COUNT);
|
||||
///
|
||||
/// No-op if it's [`None`].
|
||||
pub fn with_storage_worker_count_opt(mut self, storage_worker_count: Option<usize>) -> Self {
|
||||
if let Some(count) = storage_worker_count {
|
||||
self.storage_worker_count = count.max(MIN_WORKER_COUNT);
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
@@ -539,8 +543,12 @@ impl TreeConfig {
|
||||
}
|
||||
|
||||
/// Setter for the number of account proof worker threads.
|
||||
pub fn with_account_worker_count(mut self, account_worker_count: usize) -> Self {
|
||||
self.account_worker_count = account_worker_count.max(MIN_WORKER_COUNT);
|
||||
///
|
||||
/// No-op if it's [`None`].
|
||||
pub fn with_account_worker_count_opt(mut self, account_worker_count: Option<usize>) -> Self {
|
||||
if let Some(count) = account_worker_count {
|
||||
self.account_worker_count = count.max(MIN_WORKER_COUNT);
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
//! clap [Args](clap::Args) for engine purposes
|
||||
|
||||
use clap::{builder::Resettable, Args};
|
||||
use reth_engine_primitives::{TreeConfig, DEFAULT_MULTIPROOF_TASK_CHUNK_SIZE};
|
||||
use reth_engine_primitives::{
|
||||
TreeConfig, DEFAULT_MULTIPROOF_TASK_CHUNK_SIZE, DEFAULT_SPARSE_TRIE_MAX_STORAGE_TRIES,
|
||||
DEFAULT_SPARSE_TRIE_PRUNE_DEPTH,
|
||||
};
|
||||
use std::sync::OnceLock;
|
||||
|
||||
use crate::node_config::{
|
||||
@@ -38,6 +41,8 @@ pub struct DefaultEngineValues {
|
||||
disable_proof_v2: bool,
|
||||
cache_metrics_disabled: bool,
|
||||
enable_sparse_trie_as_cache: bool,
|
||||
sparse_trie_prune_depth: usize,
|
||||
sparse_trie_max_storage_tries: usize,
|
||||
}
|
||||
|
||||
impl DefaultEngineValues {
|
||||
@@ -179,6 +184,18 @@ impl DefaultEngineValues {
|
||||
self.enable_sparse_trie_as_cache = v;
|
||||
self
|
||||
}
|
||||
|
||||
/// Set the sparse trie prune depth by default
|
||||
pub const fn with_sparse_trie_prune_depth(mut self, v: usize) -> Self {
|
||||
self.sparse_trie_prune_depth = v;
|
||||
self
|
||||
}
|
||||
|
||||
/// Set the maximum number of storage tries to retain after sparse trie pruning by default
|
||||
pub const fn with_sparse_trie_max_storage_tries(mut self, v: usize) -> Self {
|
||||
self.sparse_trie_max_storage_tries = v;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for DefaultEngineValues {
|
||||
@@ -205,6 +222,8 @@ impl Default for DefaultEngineValues {
|
||||
disable_proof_v2: false,
|
||||
cache_metrics_disabled: false,
|
||||
enable_sparse_trie_as_cache: false,
|
||||
sparse_trie_prune_depth: DEFAULT_SPARSE_TRIE_PRUNE_DEPTH,
|
||||
sparse_trie_max_storage_tries: DEFAULT_SPARSE_TRIE_MAX_STORAGE_TRIES,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -336,6 +355,14 @@ pub struct EngineArgs {
|
||||
/// Enable sparse trie as cache.
|
||||
#[arg(long = "engine.enable-sparse-trie-as-cache", default_value_t = DefaultEngineValues::get_global().enable_sparse_trie_as_cache, conflicts_with = "disable_proof_v2")]
|
||||
pub enable_sparse_trie_as_cache: bool,
|
||||
|
||||
/// Sparse trie prune depth.
|
||||
#[arg(long = "engine.sparse-trie-prune-depth", default_value_t = DefaultEngineValues::get_global().sparse_trie_prune_depth, requires = "enable_sparse_trie_as_cache")]
|
||||
pub sparse_trie_prune_depth: usize,
|
||||
|
||||
/// Maximum number of storage tries to retain after sparse trie pruning.
|
||||
#[arg(long = "engine.sparse-trie-max-storage-tries", default_value_t = DefaultEngineValues::get_global().sparse_trie_max_storage_tries, requires = "enable_sparse_trie_as_cache")]
|
||||
pub sparse_trie_max_storage_tries: usize,
|
||||
}
|
||||
|
||||
#[allow(deprecated)]
|
||||
@@ -363,6 +390,8 @@ impl Default for EngineArgs {
|
||||
disable_proof_v2,
|
||||
cache_metrics_disabled,
|
||||
enable_sparse_trie_as_cache,
|
||||
sparse_trie_prune_depth,
|
||||
sparse_trie_max_storage_tries,
|
||||
} = DefaultEngineValues::get_global().clone();
|
||||
Self {
|
||||
persistence_threshold,
|
||||
@@ -390,6 +419,8 @@ impl Default for EngineArgs {
|
||||
disable_proof_v2,
|
||||
cache_metrics_disabled,
|
||||
enable_sparse_trie_as_cache,
|
||||
sparse_trie_prune_depth,
|
||||
sparse_trie_max_storage_tries,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -397,7 +428,7 @@ impl Default for EngineArgs {
|
||||
impl EngineArgs {
|
||||
/// Creates a [`TreeConfig`] from the engine arguments.
|
||||
pub fn tree_config(&self) -> TreeConfig {
|
||||
let mut config = TreeConfig::default()
|
||||
TreeConfig::default()
|
||||
.with_persistence_threshold(self.persistence_threshold)
|
||||
.with_memory_block_buffer_target(self.memory_block_buffer_target)
|
||||
.with_legacy_state_root(self.legacy_state_root_task_enabled)
|
||||
@@ -414,21 +445,14 @@ impl EngineArgs {
|
||||
.with_always_process_payload_attributes_on_canonical_head(
|
||||
self.always_process_payload_attributes_on_canonical_head,
|
||||
)
|
||||
.with_unwind_canonical_header(self.allow_unwind_canonical_header);
|
||||
|
||||
if let Some(count) = self.storage_worker_count {
|
||||
config = config.with_storage_worker_count(count);
|
||||
}
|
||||
|
||||
if let Some(count) = self.account_worker_count {
|
||||
config = config.with_account_worker_count(count);
|
||||
}
|
||||
|
||||
config = config.with_disable_proof_v2(self.disable_proof_v2);
|
||||
config = config.without_cache_metrics(self.cache_metrics_disabled);
|
||||
config = config.with_enable_sparse_trie_as_cache(self.enable_sparse_trie_as_cache);
|
||||
|
||||
config
|
||||
.with_unwind_canonical_header(self.allow_unwind_canonical_header)
|
||||
.with_storage_worker_count_opt(self.storage_worker_count)
|
||||
.with_account_worker_count_opt(self.account_worker_count)
|
||||
.with_disable_proof_v2(self.disable_proof_v2)
|
||||
.without_cache_metrics(self.cache_metrics_disabled)
|
||||
.with_enable_sparse_trie_as_cache(self.enable_sparse_trie_as_cache)
|
||||
.with_sparse_trie_prune_depth(self.sparse_trie_prune_depth)
|
||||
.with_sparse_trie_max_storage_tries(self.sparse_trie_max_storage_tries)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,7 +503,9 @@ mod tests {
|
||||
account_worker_count: Some(8),
|
||||
disable_proof_v2: false,
|
||||
cache_metrics_disabled: true,
|
||||
enable_sparse_trie_as_cache: false,
|
||||
enable_sparse_trie_as_cache: true,
|
||||
sparse_trie_prune_depth: 10,
|
||||
sparse_trie_max_storage_tries: 100,
|
||||
};
|
||||
|
||||
let parsed_args = CommandParser::<EngineArgs>::parse_from([
|
||||
@@ -510,6 +536,11 @@ mod tests {
|
||||
"--engine.account-worker-count",
|
||||
"8",
|
||||
"--engine.disable-cache-metrics",
|
||||
"--engine.enable-sparse-trie-as-cache",
|
||||
"--engine.sparse-trie-prune-depth",
|
||||
"10",
|
||||
"--engine.sparse-trie-max-storage-tries",
|
||||
"100",
|
||||
])
|
||||
.args;
|
||||
|
||||
|
||||
@@ -1015,6 +1015,16 @@ Engine:
|
||||
--engine.enable-sparse-trie-as-cache
|
||||
Enable sparse trie as cache
|
||||
|
||||
--engine.sparse-trie-prune-depth <SPARSE_TRIE_PRUNE_DEPTH>
|
||||
Sparse trie prune depth
|
||||
|
||||
[default: 4]
|
||||
|
||||
--engine.sparse-trie-max-storage-tries <SPARSE_TRIE_MAX_STORAGE_TRIES>
|
||||
Maximum number of storage tries to retain after sparse trie pruning
|
||||
|
||||
[default: 100]
|
||||
|
||||
ERA:
|
||||
--era.enable
|
||||
Enable import from ERA1 files
|
||||
|
||||
@@ -1015,6 +1015,16 @@ Engine:
|
||||
--engine.enable-sparse-trie-as-cache
|
||||
Enable sparse trie as cache
|
||||
|
||||
--engine.sparse-trie-prune-depth <SPARSE_TRIE_PRUNE_DEPTH>
|
||||
Sparse trie prune depth
|
||||
|
||||
[default: 4]
|
||||
|
||||
--engine.sparse-trie-max-storage-tries <SPARSE_TRIE_MAX_STORAGE_TRIES>
|
||||
Maximum number of storage tries to retain after sparse trie pruning
|
||||
|
||||
[default: 100]
|
||||
|
||||
ERA:
|
||||
--era.enable
|
||||
Enable import from ERA1 files
|
||||
|
||||
Reference in New Issue
Block a user