Skip to content

Commit 5dc10e7

Browse files
committed
fix AuRa pre-warmer issues
1 parent 220b5b8 commit 5dc10e7

File tree

8 files changed

+39
-26
lines changed

8 files changed

+39
-26
lines changed

src/Nethermind/Nethermind.Consensus.AuRa/AuRaBlockProcessor.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ public AuRaBlockProcessor(
4545
IAuRaValidator? auRaValidator,
4646
ITxFilter? txFilter = null,
4747
AuRaContractGasLimitOverride? gasLimitOverride = null,
48-
ContractRewriter? contractRewriter = null)
48+
ContractRewriter? contractRewriter = null,
49+
IBlockCachePreWarmer? preWarmer = null)
4950
: base(
5051
specProvider,
5152
blockValidator,
@@ -55,7 +56,8 @@ public AuRaBlockProcessor(
5556
receiptStorage,
5657
new BlockhashStore(blockTree, specProvider, stateProvider),
5758
logManager,
58-
withdrawalProcessor)
59+
withdrawalProcessor,
60+
preWarmer: preWarmer)
5961
{
6062
_specProvider = specProvider;
6163
_blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree));

src/Nethermind/Nethermind.Consensus.AuRa/InitializationSteps/InitializeBlockchainAuRa.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ protected override async Task InitBlockchain()
7171
}
7272
}
7373

74-
protected override BlockProcessor CreateBlockProcessor()
74+
protected override BlockProcessor CreateBlockProcessor(BlockCachePreWarmer? preWarmer)
7575
{
7676
if (_api.SpecProvider is null) throw new StepDependencyException(nameof(_api.SpecProvider));
7777
if (_api.ChainHeadStateProvider is null) throw new StepDependencyException(nameof(_api.ChainHeadStateProvider));
@@ -89,10 +89,10 @@ protected override BlockProcessor CreateBlockProcessor()
8989
_api,
9090
new ServiceTxFilter(_api.SpecProvider));
9191

92-
return NewAuraBlockProcessor(auRaTxFilter);
92+
return NewAuraBlockProcessor(auRaTxFilter, preWarmer);
9393
}
9494

95-
protected virtual AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter)
95+
protected virtual AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter, BlockCachePreWarmer? preWarmer)
9696
{
9797
IDictionary<long, IDictionary<Address, byte[]>> rewriteBytecode = _api.ChainSpec.AuRa.RewriteBytecode;
9898
ContractRewriter? contractRewriter = rewriteBytecode?.Count > 0 ? new ContractRewriter(rewriteBytecode) : null;
@@ -112,7 +112,8 @@ protected virtual AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter)
112112
CreateAuRaValidator(),
113113
txFilter,
114114
GetGasLimitCalculator(),
115-
contractRewriter
115+
contractRewriter,
116+
preWarmer: preWarmer
116117
);
117118
}
118119

src/Nethermind/Nethermind.Consensus/Processing/BlockProcessor.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ the previous head state.*/
116116
}
117117

118118
using CancellationTokenSource cancellationTokenSource = new();
119-
Task? preWarmTask = suggestedBlock.Transactions.Length < 3 ?
120-
null :
121-
_preWarmer?.PreWarmCaches(suggestedBlock, preBlockStateRoot!, cancellationTokenSource.Token);
119+
Task? preWarmTask = suggestedBlock.Transactions.Length < 3
120+
? null
121+
: _preWarmer?.PreWarmCaches(suggestedBlock, preBlockStateRoot!, cancellationTokenSource.Token);
122122
(Block processedBlock, TxReceipt[] receipts) = ProcessOne(suggestedBlock, options, blockTracer);
123123
cancellationTokenSource.Cancel();
124124
preWarmTask?.GetAwaiter().GetResult();
@@ -159,9 +159,12 @@ the previous head state.*/
159159
{
160160
_logger.Trace($"Encountered exception {ex} while processing blocks.");
161161
RestoreBranch(previousBranchStateRoot);
162-
_preWarmer?.ClearCaches();
163162
throw;
164163
}
164+
finally
165+
{
166+
_preWarmer?.ClearCaches();
167+
}
165168
}
166169

167170
public event EventHandler<BlocksProcessingEventArgs>? BlocksProcessing;

src/Nethermind/Nethermind.Init/Steps/InitializeBlockchain.cs

+6-8
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,11 @@ protected virtual Task InitBlockchain()
104104

105105
setApi.TxPoolInfoProvider = new TxPoolInfoProvider(chainHeadInfoProvider.AccountStateProvider, txPool);
106106
setApi.GasPriceOracle = new GasPriceOracle(getApi.BlockTree!, getApi.SpecProvider, _api.LogManager, blocksConfig.MinGasPrice);
107-
IBlockProcessor mainBlockProcessor = setApi.MainBlockProcessor = CreateBlockProcessor();
107+
PreBlockCaches? preBlockCaches = (_api.WorldState as IPreBlockCaches)?.Caches;
108+
BlockCachePreWarmer? preWarmer = blocksConfig.PreWarmStateOnBlockProcessing
109+
? new(new(_api.WorldStateManager!, _api.BlockTree!, _api.SpecProvider, _api.LogManager, preBlockCaches), _api.SpecProvider, _api.LogManager, preBlockCaches)
110+
: null;
111+
IBlockProcessor mainBlockProcessor = setApi.MainBlockProcessor = CreateBlockProcessor(preWarmer);
108112

109113
BlockchainProcessor blockchainProcessor = new(
110114
getApi.BlockTree,
@@ -212,7 +216,7 @@ protected virtual TxPool.TxPool CreateTxPool() =>
212216
_api.LogManager);
213217

214218
// TODO: remove from here - move to consensus?
215-
protected virtual BlockProcessor CreateBlockProcessor()
219+
protected virtual BlockProcessor CreateBlockProcessor(BlockCachePreWarmer? preWarmer)
216220
{
217221
if (_api.DbProvider is null) throw new StepDependencyException(nameof(_api.DbProvider));
218222
if (_api.RewardCalculatorSource is null) throw new StepDependencyException(nameof(_api.RewardCalculatorSource));
@@ -221,13 +225,7 @@ protected virtual BlockProcessor CreateBlockProcessor()
221225
if (_api.WorldStateManager is null) throw new StepDependencyException(nameof(_api.WorldStateManager));
222226
if (_api.SpecProvider is null) throw new StepDependencyException(nameof(_api.SpecProvider));
223227

224-
IBlocksConfig blocksConfig = _api.Config<IBlocksConfig>();
225228
IWorldState worldState = _api.WorldState!;
226-
227-
PreBlockCaches? preBlockCaches = (worldState as IPreBlockCaches)?.Caches;
228-
BlockCachePreWarmer? preWarmer = blocksConfig.PreWarmStateOnBlockProcessing
229-
? new(new(_api.WorldStateManager, _api.BlockTree, _api.SpecProvider, _api.LogManager, preBlockCaches), _api.SpecProvider, _api.LogManager, preBlockCaches)
230-
: null;
231229
return new BlockProcessor(
232230
_api.SpecProvider,
233231
_api.BlockValidator,

src/Nethermind/Nethermind.Merge.AuRa/AuRaMergeBlockProcessor.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public AuRaMergeBlockProcessor(
3333
IAuRaValidator? validator,
3434
ITxFilter? txFilter = null,
3535
AuRaContractGasLimitOverride? gasLimitOverride = null,
36-
ContractRewriter? contractRewriter = null
36+
ContractRewriter? contractRewriter = null,
37+
IBlockCachePreWarmer? preWarmer = null
3738
) : base(
3839
specProvider,
3940
blockValidator,
@@ -47,7 +48,8 @@ public AuRaMergeBlockProcessor(
4748
validator,
4849
txFilter,
4950
gasLimitOverride,
50-
contractRewriter
51+
contractRewriter,
52+
preWarmer
5153
)
5254
{ }
5355

src/Nethermind/Nethermind.Merge.AuRa/InitializationSteps/InitializeBlockchainAuRaMerge.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public InitializeBlockchainAuRaMerge(AuRaNethermindApi api) : base(api)
2424
_api = api;
2525
}
2626

27-
protected override AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter)
27+
protected override AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter, BlockCachePreWarmer? preWarmer)
2828
{
2929
IDictionary<long, IDictionary<Address, byte[]>> rewriteBytecode = _api.ChainSpec.AuRa.RewriteBytecode;
3030
ContractRewriter? contractRewriter = rewriteBytecode?.Count > 0 ? new ContractRewriter(rewriteBytecode) : null;
@@ -47,7 +47,8 @@ protected override AuRaBlockProcessor NewAuraBlockProcessor(ITxFilter txFilter)
4747
CreateAuRaValidator(),
4848
txFilter,
4949
GetGasLimitCalculator(),
50-
contractRewriter
50+
contractRewriter,
51+
preWarmer: preWarmer
5152
);
5253
}
5354

src/Nethermind/Nethermind.Optimism/InitializeBlockchainOptimism.cs

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
using Nethermind.Blockchain.Blocks;
77
using Nethermind.Blockchain.Services;
88
using Nethermind.Config;
9+
using Nethermind.Consensus.AuRa.Withdrawals;
910
using Nethermind.Consensus.Processing;
1011
using Nethermind.Consensus.Producers;
1112
using Nethermind.Consensus.Validators;
13+
using Nethermind.Consensus.Withdrawals;
1214
using Nethermind.Evm;
1315
using Nethermind.Evm.TransactionProcessing;
1416
using Nethermind.Init.Steps;
@@ -82,7 +84,7 @@ protected override IBlockValidator CreateBlockValidator()
8284
return new InvalidBlockInterceptor(blockValidator, _api.InvalidChainTracker, _api.LogManager);
8385
}
8486

85-
protected override BlockProcessor CreateBlockProcessor()
87+
protected override BlockProcessor CreateBlockProcessor(BlockCachePreWarmer? preWarmer)
8688
{
8789
if (_api.DbProvider is null) throw new StepDependencyException(nameof(_api.DbProvider));
8890
if (_api.RewardCalculatorSource is null) throw new StepDependencyException(nameof(_api.RewardCalculatorSource));
@@ -105,7 +107,9 @@ protected override BlockProcessor CreateBlockProcessor()
105107
new BlockhashStore(_api.BlockTree, _api.SpecProvider, _api.WorldState),
106108
_api.LogManager,
107109
_api.SpecHelper,
108-
contractRewriter);
110+
contractRewriter,
111+
new BlockProductionWithdrawalProcessor(new NullWithdrawalProcessor()),
112+
preWarmer: preWarmer);
109113
}
110114

111115
protected override IUnclesValidator CreateUnclesValidator() => Always.Valid;

src/Nethermind/Nethermind.Optimism/OptimismBlockProcessor.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ public OptimismBlockProcessor(
3434
ILogManager? logManager,
3535
IOPConfigHelper opConfigHelper,
3636
Create2DeployerContractRewriter contractRewriter,
37-
IWithdrawalProcessor? withdrawalProcessor = null)
37+
IWithdrawalProcessor? withdrawalProcessor = null,
38+
IBlockCachePreWarmer? preWarmer = null)
3839
: base(specProvider, blockValidator, rewardCalculator, blockTransactionsExecutor,
39-
stateProvider, receiptStorage, blockhashStore, logManager, withdrawalProcessor, ReceiptsRootCalculator.Instance)
40+
stateProvider, receiptStorage, blockhashStore, logManager, withdrawalProcessor,
41+
ReceiptsRootCalculator.Instance, preWarmer)
4042
{
4143
ArgumentNullException.ThrowIfNull(stateProvider);
4244
_contractRewriter = contractRewriter;

0 commit comments

Comments
 (0)