Skip to content

Commit bf6fe36

Browse files
authored
Modify the thread Besu node runner to correctly register plugins (#8591)
Signed-off-by: Karim Taam <karim.t2am@gmail.com>
1 parent ac95f88 commit bf6fe36

File tree

1 file changed

+103
-62
lines changed

1 file changed

+103
-62
lines changed

acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ThreadBesuNodeRunner.java

Lines changed: 103 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,14 @@ public void startNode(final BesuNode node) {
172172

173173
node.getGenesisConfig().map(GenesisConfig::fromConfig).ifPresent(builder::genesisConfig);
174174

175-
final BesuController besuController = component.besuController();
176-
177-
InProcessRpcConfiguration inProcessRpcConfiguration = node.inProcessRpcConfiguration();
178-
179175
final BesuPluginContextImpl besuPluginContext =
180176
besuPluginContextMap.computeIfAbsent(node, n -> component.getBesuPluginContext());
181177

178+
builder.besuComponent(component);
179+
180+
final BesuController besuController = component.besuController();
181+
InProcessRpcConfiguration inProcessRpcConfiguration = node.inProcessRpcConfiguration();
182+
182183
final RunnerBuilder runnerBuilder = new RunnerBuilder();
183184
runnerBuilder.permissioningConfiguration(node.getPermissioningConfiguration());
184185
runnerBuilder.apiConfiguration(node.getApiConfiguration());
@@ -212,19 +213,7 @@ public void startNode(final BesuNode node) {
212213

213214
runner.startExternalServices();
214215

215-
besuPluginContext.addService(
216-
BesuEvents.class,
217-
new BesuEventsImpl(
218-
besuController.getProtocolContext().getBlockchain(),
219-
besuController.getProtocolManager().getBlockBroadcaster(),
220-
besuController.getTransactionPool(),
221-
besuController.getSyncState(),
222-
besuController.getProtocolContext().getBadBlockManager()));
223-
besuPluginContext.addService(
224-
TransactionPoolService.class,
225-
new TransactionPoolServiceImpl(besuController.getTransactionPool()));
226-
besuPluginContext.addService(
227-
MiningService.class, new MiningServiceImpl(besuController.getMiningCoordinator()));
216+
loadAdditionalServices(besuController, besuPluginContext);
228217

229218
component.rpcEndpointService().init(runner.getInProcessRpcMethods());
230219

@@ -261,6 +250,32 @@ public boolean isActive(final String nodeName) {
261250
return besuRunners.containsKey(nodeName);
262251
}
263252

253+
private void loadAdditionalServices(
254+
final BesuController besuController, final BesuPluginContextImpl besuPluginContext) {
255+
final TraceServiceImpl traceService =
256+
new TraceServiceImpl(
257+
new BlockchainQueries(
258+
besuController.getProtocolSchedule(),
259+
besuController.getProtocolContext().getBlockchain(),
260+
besuController.getProtocolContext().getWorldStateArchive(),
261+
besuController.getMiningParameters()),
262+
besuController.getProtocolSchedule());
263+
besuPluginContext.addService(TraceService.class, traceService);
264+
besuPluginContext.addService(
265+
BesuEvents.class,
266+
new BesuEventsImpl(
267+
besuController.getProtocolContext().getBlockchain(),
268+
besuController.getProtocolManager().getBlockBroadcaster(),
269+
besuController.getTransactionPool(),
270+
besuController.getSyncState(),
271+
besuController.getProtocolContext().getBadBlockManager()));
272+
besuPluginContext.addService(
273+
TransactionPoolService.class,
274+
new TransactionPoolServiceImpl(besuController.getTransactionPool()));
275+
besuPluginContext.addService(
276+
MiningService.class, new MiningServiceImpl(besuController.getMiningCoordinator()));
277+
}
278+
264279
private void killRunner(final String name) {
265280
LOG.info("Killing " + name + " runner");
266281

@@ -336,12 +351,8 @@ RpcEndpointServiceImpl provideRpcEndpointService() {
336351

337352
@Provides
338353
@Singleton
339-
BlockchainServiceImpl provideBlockchainService(final BesuController besuController) {
340-
BlockchainServiceImpl retval = new BlockchainServiceImpl();
341-
retval.init(
342-
besuController.getProtocolContext().getBlockchain(),
343-
besuController.getProtocolSchedule());
344-
return retval;
354+
BlockchainServiceImpl provideBlockchainService() {
355+
return new BlockchainServiceImpl();
345356
}
346357

347358
@Provides
@@ -373,22 +384,14 @@ TransactionPoolValidatorServiceImpl provideTransactionPoolValidatorService() {
373384
}
374385

375386
@Provides
376-
@Singleton
377-
TransactionSelectionServiceImpl provideTransactionSelectionService() {
378-
return new TransactionSelectionServiceImpl();
387+
DataStorageConfiguration provideDataStorageConfiguration(final BesuNode node) {
388+
return node.getDataStorageConfiguration();
379389
}
380390

381391
@Provides
382392
@Singleton
383-
TraceServiceImpl provideTraceService(
384-
final BesuController besuController, final MiningConfiguration miningConfiguration) {
385-
return new TraceServiceImpl(
386-
new BlockchainQueries(
387-
besuController.getProtocolSchedule(),
388-
besuController.getProtocolContext().getBlockchain(),
389-
besuController.getProtocolContext().getWorldStateArchive(),
390-
miningConfiguration),
391-
besuController.getProtocolSchedule());
393+
TransactionSelectionServiceImpl provideTransactionSelectionService() {
394+
return new TransactionSelectionServiceImpl();
392395
}
393396

394397
@Provides
@@ -424,11 +427,8 @@ TransactionSimulator provideTransactionSimulator(
424427

425428
@Provides
426429
@Singleton
427-
TransactionSimulationServiceImpl provideTransactionSimulationService(
428-
final Blockchain blockchain, final TransactionSimulator transactionSimulator) {
429-
TransactionSimulationServiceImpl retval = new TransactionSimulationServiceImpl();
430-
retval.init(blockchain, transactionSimulator);
431-
return retval;
430+
TransactionSimulationServiceImpl provideTransactionSimulationService() {
431+
return new TransactionSimulationServiceImpl();
432432
}
433433

434434
@Provides
@@ -470,12 +470,14 @@ public SynchronizerConfiguration provideSynchronizationConfiguration() {
470470
public BesuControllerBuilder provideBesuControllerBuilder(
471471
final EthNetworkConfig ethNetworkConfig,
472472
final SynchronizerConfiguration synchronizerConfiguration,
473-
final TransactionPoolConfiguration transactionPoolConfiguration) {
473+
final TransactionPoolConfiguration transactionPoolConfiguration,
474+
final DataStorageConfiguration dataStorageConfiguration) {
474475

475476
final BesuControllerBuilder builder =
476477
new BesuController.Builder()
477478
.fromEthNetworkConfig(ethNetworkConfig, synchronizerConfiguration.getSyncMode());
478479
builder.transactionPoolConfiguration(transactionPoolConfiguration);
480+
builder.dataStorageConfiguration(dataStorageConfiguration);
479481
return builder;
480482
}
481483

@@ -487,12 +489,27 @@ public BesuController provideBesuController(
487489
final MetricsSystem metricsSystem,
488490
final KeyValueStorageProvider storageProvider,
489491
final MiningConfiguration miningConfiguration,
490-
final ApiConfiguration apiConfiguration) {
492+
final ApiConfiguration apiConfiguration,
493+
final StorageServiceImpl storageService,
494+
final BlockchainServiceImpl blockchainServiceImpl,
495+
final SecurityModuleServiceImpl securityModuleService,
496+
final RpcEndpointServiceImpl rpcEndpointServiceImpl,
497+
final BesuConfiguration commonPluginConfiguration,
498+
final PermissioningServiceImpl permissioningService,
499+
final TransactionSelectionServiceImpl transactionSelectionServiceImpl,
500+
final TransactionPoolValidatorServiceImpl transactionPoolValidatorServiceImpl,
501+
final TransactionSimulationServiceImpl transactionSimulationServiceImpl,
502+
final MetricsConfiguration metricsConfiguration,
503+
final MetricCategoryRegistryImpl metricCategoryRegistry,
504+
final @Named("ExtraCLIOptions") List<String> extraCLIOptions,
505+
final @Named("RequestedPlugins") List<String> requestedPlugins,
506+
final BesuPluginContextImpl besuPluginContext,
507+
final DataStorageConfiguration dataStorageConfiguration) {
491508

492509
builder
493510
.synchronizerConfiguration(synchronizerConfiguration)
494511
.metricsSystem((ObservableMetricsSystem) metricsSystem)
495-
.dataStorageConfiguration(DataStorageConfiguration.DEFAULT_FOREST_CONFIG)
512+
.dataStorageConfiguration(dataStorageConfiguration)
496513
.ethProtocolConfiguration(EthProtocolConfiguration.defaultConfig())
497514
.clock(Clock.systemUTC())
498515
.storageProvider(storageProvider)
@@ -501,9 +518,32 @@ public BesuController provideBesuController(
501518
.maxRemotelyInitiatedPeers(15)
502519
.miningParameters(miningConfiguration)
503520
.randomPeerPriority(false)
504-
.apiConfiguration(apiConfiguration)
505-
.besuComponent(null);
506-
return builder.build();
521+
.apiConfiguration(apiConfiguration);
522+
loadPluginContext(
523+
storageService,
524+
securityModuleService,
525+
rpcEndpointServiceImpl,
526+
blockchainServiceImpl,
527+
commonPluginConfiguration,
528+
permissioningService,
529+
transactionSelectionServiceImpl,
530+
transactionPoolValidatorServiceImpl,
531+
transactionSimulationServiceImpl,
532+
metricsConfiguration,
533+
metricCategoryRegistry,
534+
metricsSystem,
535+
extraCLIOptions,
536+
requestedPlugins,
537+
besuPluginContext);
538+
final BesuController besuController = builder.build();
539+
blockchainServiceImpl.init(
540+
besuController.getProtocolContext().getBlockchain(),
541+
besuController.getProtocolSchedule());
542+
transactionSimulationServiceImpl.init(
543+
besuController.getProtocolContext().getBlockchain(),
544+
besuController.getTransactionSimulator());
545+
546+
return besuController;
507547
}
508548

509549
@Provides
@@ -522,42 +562,44 @@ public EthNetworkConfig provideEthNetworkConfig(
522562
return ethNetworkConfig;
523563
}
524564

565+
@Singleton
525566
@Provides
526-
public BesuPluginContextImpl providePluginContext(
567+
public BesuPluginContextImpl providePluginContext() {
568+
return new BesuPluginContextImpl();
569+
}
570+
571+
public void loadPluginContext(
527572
final StorageServiceImpl storageService,
528573
final SecurityModuleServiceImpl securityModuleService,
529-
final TransactionSimulationServiceImpl transactionSimulationServiceImpl,
530-
final TransactionSelectionServiceImpl transactionSelectionServiceImpl,
531-
final TransactionPoolValidatorServiceImpl transactionPoolValidatorServiceImpl,
532-
final BlockchainServiceImpl blockchainServiceImpl,
533574
final RpcEndpointServiceImpl rpcEndpointServiceImpl,
575+
final BlockchainServiceImpl blockchainServiceImpl,
534576
final BesuConfiguration commonPluginConfiguration,
535577
final PermissioningServiceImpl permissioningService,
578+
final TransactionSelectionServiceImpl transactionSelectionServiceImpl,
579+
final TransactionPoolValidatorServiceImpl transactionPoolValidatorServiceImpl,
580+
final TransactionSimulationServiceImpl transactionSimulationServiceImpl,
536581
final MetricsConfiguration metricsConfiguration,
537582
final MetricCategoryRegistryImpl metricCategoryRegistry,
538583
final MetricsSystem metricsSystem,
539-
final TraceServiceImpl traceService,
540584
final @Named("ExtraCLIOptions") List<String> extraCLIOptions,
541-
final @Named("RequestedPlugins") List<String> requestedPlugins) {
585+
final @Named("RequestedPlugins") List<String> requestedPlugins,
586+
final BesuPluginContextImpl besuPluginContext) {
542587
final CommandLine commandLine = new CommandLine(CommandSpec.create());
543-
final BesuPluginContextImpl besuPluginContext = new BesuPluginContextImpl();
544588
besuPluginContext.addService(StorageService.class, storageService);
545589
besuPluginContext.addService(SecurityModuleService.class, securityModuleService);
546590
besuPluginContext.addService(PicoCLIOptions.class, new PicoCLIOptionsImpl(commandLine));
591+
besuPluginContext.addService(BlockchainService.class, blockchainServiceImpl);
547592
besuPluginContext.addService(RpcEndpointService.class, rpcEndpointServiceImpl);
593+
besuPluginContext.addService(BesuConfiguration.class, commonPluginConfiguration);
594+
metricCategoryRegistry.setMetricsConfiguration(metricsConfiguration);
595+
besuPluginContext.addService(MetricCategoryRegistry.class, metricCategoryRegistry);
596+
besuPluginContext.addService(MetricsSystem.class, metricsSystem);
548597
besuPluginContext.addService(
549598
TransactionSelectionService.class, transactionSelectionServiceImpl);
550599
besuPluginContext.addService(
551600
TransactionPoolValidatorService.class, transactionPoolValidatorServiceImpl);
552601
besuPluginContext.addService(
553602
TransactionSimulationService.class, transactionSimulationServiceImpl);
554-
besuPluginContext.addService(BlockchainService.class, blockchainServiceImpl);
555-
besuPluginContext.addService(BesuConfiguration.class, commonPluginConfiguration);
556-
metricCategoryRegistry.setMetricsConfiguration(metricsConfiguration);
557-
besuPluginContext.addService(MetricCategoryRegistry.class, metricCategoryRegistry);
558-
besuPluginContext.addService(MetricsSystem.class, metricsSystem);
559-
besuPluginContext.addService(TraceService.class, traceService);
560-
561603
final Path pluginsPath;
562604
final String pluginDir = System.getProperty("besu.plugins.dir");
563605
if (pluginDir == null || pluginDir.isEmpty()) {
@@ -586,7 +628,6 @@ public BesuPluginContextImpl providePluginContext(
586628

587629
// register built-in plugins
588630
new RocksDBPlugin().register(besuPluginContext);
589-
return besuPluginContext;
590631
}
591632

592633
@Provides

0 commit comments

Comments
 (0)