diff --git a/besu/src/main/java/org/hyperledger/besu/services/BesuPluginContextImpl.java b/besu/src/main/java/org/hyperledger/besu/services/BesuPluginContextImpl.java index fbee90edef9..4215c7c1852 100644 --- a/besu/src/main/java/org/hyperledger/besu/services/BesuPluginContextImpl.java +++ b/besu/src/main/java/org/hyperledger/besu/services/BesuPluginContextImpl.java @@ -113,10 +113,13 @@ public Optional getService(final Class serviceType } private List detectPlugins(final PluginConfiguration config) { + LOG.debug("detecting plugin in configured besu.plugins.dir {}", config.getPluginsDir()); ClassLoader pluginLoader = pluginDirectoryLoader(config.getPluginsDir()).orElse(getClass().getClassLoader()); ServiceLoader serviceLoader = ServiceLoader.load(BesuPlugin.class, pluginLoader); - return StreamSupport.stream(serviceLoader.spliterator(), false).toList(); + return StreamSupport.stream(serviceLoader.spliterator(), false) + .peek(l -> LOG.info("found besu-plugin {}", l.getName().orElse("noName"))) + .toList(); } /** @@ -155,11 +158,21 @@ public void registerPlugins() { } else { // Register only the plugins that were explicitly requested and validated requestedPlugins = config.getRequestedPlugins(); + // Match and validate the requested plugins against the detected plugins + try { List registeringPlugins = matchAndValidateRequestedPlugins(requestedPlugins, detectedPlugins); - registerPlugins(registeringPlugins); + registerPlugins(registeringPlugins); + + } catch (final Exception e) { + if (config.isContinueOnPluginError()) { + LOG.error("Error matching or registering plugins. Plugins will not start.", e); + } else { + throw new RuntimeException("Error matching or registering plugins. Plugins will not start", e); + } + } } } else { LOG.debug("External plugins are disabled. Skipping plugins registration."); @@ -362,6 +375,7 @@ private Optional pluginDirectoryLoader(final Path pluginsDir) { final URL[] pluginJarURLs = pluginFilesList .filter(p -> p.getFileName().toString().endsWith(".jar")) + .peek(p -> LOG.debug("plugin jar url: {}", p)) .map(BesuPluginContextImpl::pathToURIOrNull) .toArray(URL[]::new); return Optional.of(new URLClassLoader(pluginJarURLs, this.getClass().getClassLoader())); diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java index af1a822b76b..c8682422161 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java @@ -108,7 +108,10 @@ private BlockAwareOperationTracer getBlockImportTracer( Optional.ofNullable(protocolContext.getPluginServiceManager()) .flatMap(serviceManager -> serviceManager.getService(BlockImportTracerProvider.class)) // if block import tracer provider is not specified by plugin, default to no tracing - .orElse((__) -> BlockAwareOperationTracer.NO_TRACING); + .orElse((__) -> { + LOG.info("Block Import uses NO_TRACING"); + return BlockAwareOperationTracer.NO_TRACING; + }); } return blockImportTracerProvider.getBlockImportTracer(header);