Skip to content

Commit 405b730

Browse files
authored
chore: remove prune_modes from BlockWriter (#9231)
1 parent e95c6db commit 405b730

File tree

19 files changed

+105
-117
lines changed

19 files changed

+105
-117
lines changed

bin/reth/src/commands/debug_cmd/build_block.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use reth_provider::{
2929
providers::BlockchainProvider, BlockHashReader, BlockReader, BlockWriter, ChainSpecProvider,
3030
ProviderFactory, StageCheckpointReader, StateProviderFactory,
3131
};
32+
use reth_prune::PruneModes;
3233
use reth_revm::{database::StateProviderDatabase, primitives::EnvKzgSettings};
3334
use reth_rpc_types::engine::{BlobsBundleV1, PayloadAttributes};
3435
use reth_stages::StageId;
@@ -122,7 +123,11 @@ impl Command {
122123
// configure blockchain tree
123124
let tree_externals =
124125
TreeExternals::new(provider_factory.clone(), Arc::clone(&consensus), executor);
125-
let tree = BlockchainTree::new(tree_externals, BlockchainTreeConfig::default(), None)?;
126+
let tree = BlockchainTree::new(
127+
tree_externals,
128+
BlockchainTreeConfig::default(),
129+
PruneModes::none(),
130+
)?;
126131
let blockchain_tree = Arc::new(ShareableBlockchainTree::new(tree));
127132

128133
// fetch the best block from the database
@@ -298,7 +303,6 @@ impl Command {
298303
execution_outcome,
299304
hashed_post_state,
300305
trie_updates,
301-
None,
302306
)?;
303307
info!(target: "reth::cli", "Successfully appended built block");
304308
}

bin/reth/src/commands/debug_cmd/in_memory_merkle.rs

-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ impl Command {
163163
.clone()
164164
.try_seal_with_senders()
165165
.map_err(|_| BlockValidationError::SenderRecoveryError)?,
166-
None,
167166
)?;
168167
execution_outcome.write_to_storage(provider_rw.tx_ref(), None, OriginalValuesKnown::No)?;
169168
let storage_lists = provider_rw.changed_storages_with_range(block.number..=block.number)?;

bin/reth/src/commands/debug_cmd/merkle.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ impl Command {
144144
.map_err(|block| eyre::eyre!("Error sealing block with senders: {block:?}"))?;
145145
trace!(target: "reth::cli", block_number, "Executing block");
146146

147-
provider_rw.insert_block(sealed_block.clone(), None)?;
147+
provider_rw.insert_block(sealed_block.clone())?;
148148

149149
td += sealed_block.difficulty;
150150
let mut executor = executor_provider.batch_executor(

bin/reth/src/commands/debug_cmd/replay_engine.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,11 @@ impl Command {
8585
// Configure blockchain tree
8686
let tree_externals =
8787
TreeExternals::new(provider_factory.clone(), Arc::clone(&consensus), executor);
88-
let tree = BlockchainTree::new(tree_externals, BlockchainTreeConfig::default(), None)?;
88+
let tree = BlockchainTree::new(
89+
tree_externals,
90+
BlockchainTreeConfig::default(),
91+
PruneModes::none(),
92+
)?;
8993
let blockchain_tree = Arc::new(ShareableBlockchainTree::new(tree));
9094

9195
// Set up the blockchain provider
@@ -144,7 +148,7 @@ impl Command {
144148
network_client,
145149
Pipeline::builder().build(
146150
provider_factory.clone(),
147-
StaticFileProducer::new(provider_factory.clone(), PruneModes::default()),
151+
StaticFileProducer::new(provider_factory.clone(), PruneModes::none()),
148152
),
149153
blockchain_db.clone(),
150154
Box::new(ctx.task_executor.clone()),

crates/blockchain-tree/src/blockchain_tree.rs

+20-18
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,6 @@ pub struct BlockchainTree<DB, E> {
6565
externals: TreeExternals<DB, E>,
6666
/// Tree configuration
6767
config: BlockchainTreeConfig,
68-
/// Prune modes.
69-
prune_modes: Option<PruneModes>,
7068
/// Broadcast channel for canon state changes notifications.
7169
canon_state_notification_sender: CanonStateNotificationSender,
7270
/// Metrics for sync stages.
@@ -115,16 +113,19 @@ where
115113
/// storage space efficiently. It's important to validate this configuration to ensure it does
116114
/// not lead to unintended data loss.
117115
pub fn new(
118-
externals: TreeExternals<DB, E>,
116+
mut externals: TreeExternals<DB, E>,
119117
config: BlockchainTreeConfig,
120-
prune_modes: Option<PruneModes>,
118+
prune_modes: PruneModes,
121119
) -> ProviderResult<Self> {
122120
let max_reorg_depth = config.max_reorg_depth() as usize;
123121
// The size of the broadcast is twice the maximum reorg depth, because at maximum reorg
124122
// depth at least N blocks must be sent at once.
125123
let (canon_state_notification_sender, _receiver) =
126124
tokio::sync::broadcast::channel(max_reorg_depth * 2);
127125

126+
// Set the prune modes argument, on the provider
127+
externals.provider_factory = externals.provider_factory.with_prune_modes(prune_modes);
128+
128129
let last_canonical_hashes =
129130
externals.fetch_latest_canonical_hashes(config.num_of_canonical_hashes() as usize)?;
130131

@@ -138,7 +139,6 @@ where
138139
config.max_unconnected_blocks(),
139140
),
140141
config,
141-
prune_modes,
142142
canon_state_notification_sender,
143143
sync_metrics_tx: None,
144144
metrics: Default::default(),
@@ -1258,7 +1258,6 @@ where
12581258
state,
12591259
hashed_state,
12601260
trie_updates,
1261-
self.prune_modes.as_ref(),
12621261
)
12631262
.map_err(|e| CanonicalError::CanonicalCommit(e.to_string()))?;
12641263

@@ -1424,7 +1423,6 @@ mod tests {
14241423
provider
14251424
.insert_historical_block(
14261425
genesis.try_seal_with_senders().expect("invalid tx signature in genesis"),
1427-
None,
14281426
)
14291427
.unwrap();
14301428

@@ -1545,7 +1543,6 @@ mod tests {
15451543
SealedBlock::new(chain_spec.sealed_genesis_header(), Default::default())
15461544
.try_seal_with_senders()
15471545
.unwrap(),
1548-
None,
15491546
)
15501547
.unwrap();
15511548
let account = Account { balance: initial_signer_balance, ..Default::default() };
@@ -1647,7 +1644,7 @@ mod tests {
16471644
let mut tree = BlockchainTree::new(
16481645
TreeExternals::new(provider_factory, consensus, executor_provider),
16491646
BlockchainTreeConfig::default(),
1650-
None,
1647+
PruneModes::default(),
16511648
)
16521649
.expect("failed to create tree");
16531650

@@ -1727,7 +1724,8 @@ mod tests {
17271724

17281725
// make tree
17291726
let config = BlockchainTreeConfig::new(1, 2, 3, 2);
1730-
let mut tree = BlockchainTree::new(externals, config, None).expect("failed to create tree");
1727+
let mut tree = BlockchainTree::new(externals, config, PruneModes::default())
1728+
.expect("failed to create tree");
17311729
// genesis block 10 is already canonical
17321730
tree.make_canonical(B256::ZERO).unwrap();
17331731

@@ -1803,7 +1801,8 @@ mod tests {
18031801

18041802
// make tree
18051803
let config = BlockchainTreeConfig::new(1, 2, 3, 2);
1806-
let mut tree = BlockchainTree::new(externals, config, None).expect("failed to create tree");
1804+
let mut tree = BlockchainTree::new(externals, config, PruneModes::default())
1805+
.expect("failed to create tree");
18071806
// genesis block 10 is already canonical
18081807
tree.make_canonical(B256::ZERO).unwrap();
18091808

@@ -1888,7 +1887,8 @@ mod tests {
18881887

18891888
// make tree
18901889
let config = BlockchainTreeConfig::new(1, 2, 3, 2);
1891-
let mut tree = BlockchainTree::new(externals, config, None).expect("failed to create tree");
1890+
let mut tree = BlockchainTree::new(externals, config, PruneModes::default())
1891+
.expect("failed to create tree");
18921892
// genesis block 10 is already canonical
18931893
tree.make_canonical(B256::ZERO).unwrap();
18941894

@@ -1986,7 +1986,8 @@ mod tests {
19861986

19871987
// make tree
19881988
let config = BlockchainTreeConfig::new(1, 2, 3, 2);
1989-
let mut tree = BlockchainTree::new(externals, config, None).expect("failed to create tree");
1989+
let mut tree = BlockchainTree::new(externals, config, PruneModes::default())
1990+
.expect("failed to create tree");
19901991

19911992
let mut canon_notif = tree.subscribe_canon_state();
19921993
// genesis block 10 is already canonical
@@ -2379,7 +2380,8 @@ mod tests {
23792380

23802381
// make tree
23812382
let config = BlockchainTreeConfig::new(1, 2, 3, 2);
2382-
let mut tree = BlockchainTree::new(externals, config, None).expect("failed to create tree");
2383+
let mut tree = BlockchainTree::new(externals, config, PruneModes::default())
2384+
.expect("failed to create tree");
23832385

23842386
assert_eq!(
23852387
tree.insert_block(block1.clone(), BlockValidationKind::Exhaustive).unwrap(),
@@ -2399,8 +2401,8 @@ mod tests {
23992401
tree.make_canonical(block2.hash()).unwrap();
24002402

24012403
// restart
2402-
let mut tree =
2403-
BlockchainTree::new(cloned_externals_1, config, None).expect("failed to create tree");
2404+
let mut tree = BlockchainTree::new(cloned_externals_1, config, PruneModes::default())
2405+
.expect("failed to create tree");
24042406
assert_eq!(tree.block_indices().last_finalized_block(), 0);
24052407

24062408
let mut block1a = block1;
@@ -2416,8 +2418,8 @@ mod tests {
24162418
tree.finalize_block(block1a.number).unwrap();
24172419

24182420
// restart
2419-
let tree =
2420-
BlockchainTree::new(cloned_externals_2, config, None).expect("failed to create tree");
2421+
let tree = BlockchainTree::new(cloned_externals_2, config, PruneModes::default())
2422+
.expect("failed to create tree");
24212423

24222424
assert_eq!(tree.block_indices().last_finalized_block(), block1a.number);
24232425
}

crates/cli/commands/src/common.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,10 @@ impl EnvironmentArgs {
109109
static_file_provider: StaticFileProvider,
110110
) -> eyre::Result<ProviderFactory<Arc<DatabaseEnv>>> {
111111
let has_receipt_pruning = config.prune.as_ref().map_or(false, |a| a.has_receipts_pruning());
112-
let factory = ProviderFactory::new(db, self.chain.clone(), static_file_provider);
112+
let prune_modes =
113+
config.prune.as_ref().map(|prune| prune.segments.clone()).unwrap_or_default();
114+
let factory = ProviderFactory::new(db, self.chain.clone(), static_file_provider)
115+
.with_prune_modes(prune_modes.clone());
113116

114117
info!(target: "reth::cli", "Verifying storage consistency.");
115118

@@ -123,8 +126,6 @@ impl EnvironmentArgs {
123126
return Ok(factory)
124127
}
125128

126-
let prune_modes = config.prune.clone().map(|prune| prune.segments).unwrap_or_default();
127-
128129
// Highly unlikely to happen, and given its destructive nature, it's better to panic
129130
// instead.
130131
assert_ne!(unwind_target, PipelineTarget::Unwind(0), "A static file <> database inconsistency was found that would trigger an unwind to block 0");

crates/consensus/beacon/src/engine/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -2159,7 +2159,6 @@ mod tests {
21592159
provider
21602160
.insert_block(
21612161
b.clone().try_seal_with_senders().expect("invalid tx signature in block"),
2162-
None,
21632162
)
21642163
.map(drop)
21652164
})

crates/consensus/beacon/src/engine/test_utils.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,8 @@ where
393393
let externals = TreeExternals::new(provider_factory.clone(), consensus, executor_factory);
394394
let config = BlockchainTreeConfig::new(1, 2, 3, 2);
395395
let tree = Arc::new(ShareableBlockchainTree::new(
396-
BlockchainTree::new(externals, config, None).expect("failed to create tree"),
396+
BlockchainTree::new(externals, config, PruneModes::default())
397+
.expect("failed to create tree"),
397398
));
398399
let latest = self.base_config.chain_spec.genesis_header().seal_slow();
399400
let blockchain_provider =

crates/engine/tree/src/persistence.rs

+1-8
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,9 @@ impl<DB: Database> Persistence<DB> {
6161
// * indices (already done basically)
6262
// Insert the blocks
6363
for block in blocks {
64-
// TODO: prune modes - a bit unsure that it should be at this level of abstraction and
65-
// not another
66-
//
67-
// ie, an external consumer of providers (or the database task) really does not care
68-
// about pruning, just the node. Maybe we are the biggest user, and use it enough that
69-
// we need a helper, but I'd rather make the pruning behavior more explicit then
70-
let prune_modes = None;
7164
let sealed_block =
7265
block.block().clone().try_with_senders_unchecked(block.senders().clone()).unwrap();
73-
provider_rw.insert_block(sealed_block, prune_modes)?;
66+
provider_rw.insert_block(sealed_block)?;
7467

7568
// Write state and changesets to the database.
7669
// Must be written after blocks because of the receipt lookup.

crates/exex/exex/src/backfill.rs

-1
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,6 @@ mod tests {
323323
outcome_batch,
324324
Default::default(),
325325
Default::default(),
326-
None,
327326
)?;
328327
provider_rw.commit()?;
329328

crates/node/builder/src/launch/common.rs

+7-12
Original file line numberDiff line numberDiff line change
@@ -320,9 +320,9 @@ impl<R> LaunchContextWith<Attached<WithConfigs, R>> {
320320
self.toml_config().prune.clone().or_else(|| self.node_config().prune_config())
321321
}
322322

323-
/// Returns the configured [`PruneModes`]
324-
pub fn prune_modes(&self) -> Option<PruneModes> {
325-
self.prune_config().map(|config| config.segments)
323+
/// Returns the configured [`PruneModes`], returning the default if no config was available.
324+
pub fn prune_modes(&self) -> PruneModes {
325+
self.prune_config().map(|config| config.segments).unwrap_or_default()
326326
}
327327

328328
/// Returns an initialized [`PrunerBuilder`] based on the configured [`PruneConfig`]
@@ -364,6 +364,7 @@ where
364364
self.chain_spec(),
365365
StaticFileProvider::read_write(self.data_dir().static_files())?,
366366
)
367+
.with_prune_modes(self.prune_modes())
367368
.with_static_files_metrics();
368369

369370
let has_receipt_pruning =
@@ -395,14 +396,11 @@ where
395396
NoopBodiesDownloader::default(),
396397
NoopBlockExecutorProvider::default(),
397398
self.toml_config().stages.clone(),
398-
self.prune_modes().unwrap_or_default(),
399+
self.prune_modes(),
399400
))
400401
.build(
401402
factory.clone(),
402-
StaticFileProducer::new(
403-
factory.clone(),
404-
self.prune_modes().unwrap_or_default(),
405-
),
403+
StaticFileProducer::new(factory.clone(), self.prune_modes()),
406404
);
407405

408406
// Unwinds to block
@@ -705,10 +703,7 @@ where
705703

706704
/// Creates a new [`StaticFileProducer`] with the attached database.
707705
pub fn static_file_producer(&self) -> StaticFileProducer<DB> {
708-
StaticFileProducer::new(
709-
self.provider_factory().clone(),
710-
self.prune_modes().unwrap_or_default(),
711-
)
706+
StaticFileProducer::new(self.provider_factory().clone(), self.prune_modes())
712707
}
713708

714709
/// Returns the current head block.

0 commit comments

Comments
 (0)