From c127f9c1d7b63630a71c1d636bef0b3ed146ee34 Mon Sep 17 00:00:00 2001 From: Justin Florentine Date: Wed, 20 Nov 2024 17:23:49 -0500 Subject: [PATCH] naming things is important (#7895) BesuContext was not a helpful name for an interface that only manipulates services to be used by plugins. --------- Signed-off-by: jflo --- CHANGELOG.md | 1 + .../plugins/BadCLIOptionsPlugin.java | 4 +- .../plugins/TestBesuEventsPlugin.java | 6 +- .../TestBlockchainServiceFinalizedPlugin.java | 8 +-- .../TestInProcessRpcServicePlugin.java | 4 +- .../acceptance/plugins/TestMetricsPlugin.java | 10 ++-- .../plugins/TestPermissioningPlugin.java | 4 +- .../acceptance/plugins/TestPicoCLIPlugin.java | 4 +- .../plugins/TestPrivacyServicePlugin.java | 6 +- .../plugins/TestRpcEndpointServicePlugin.java | 4 +- .../besu/services/BesuPluginContextImpl.java | 4 +- .../bonsai/BonsaiWorldStateProvider.java | 4 +- .../common/DiffBasedWorldStateProvider.java | 4 +- .../common/trielog/TrieLogManager.java | 6 +- plugin-api/build.gradle | 2 +- .../hyperledger/besu/plugin/BesuContext.java | 42 +------------- .../hyperledger/besu/plugin/BesuPlugin.java | 2 +- .../besu/plugin/ServiceManager.java | 55 +++++++++++++++++++ .../besu/plugin/services/BesuService.java | 6 +- .../storage/rocksdb/RocksDBPlugin.java | 6 +- .../kvstore/InMemoryStoragePlugin.java | 6 +- 21 files changed, 104 insertions(+), 84 deletions(-) create mode 100644 plugin-api/src/main/java/org/hyperledger/besu/plugin/ServiceManager.java diff --git a/CHANGELOG.md b/CHANGELOG.md index d9d69f5ef72..4cbda780979 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Removed Retesteth rpc service and commands [#7833](https://github.com/hyperledger/besu/pull/7783) ### Upcoming Breaking Changes +- Plugin API will be deprecating the BesuContext interface to be replaced with the ServiceManager interface. - `MetricSystem::createLabelledGauge` is deprecated and will be removed in a future release, replace it with `MetricSystem::createLabelledSuppliedGauge` ### Additions and Improvements diff --git a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/BadCLIOptionsPlugin.java b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/BadCLIOptionsPlugin.java index d9bde19b1ea..ec048ea0d32 100644 --- a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/BadCLIOptionsPlugin.java +++ b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/BadCLIOptionsPlugin.java @@ -16,8 +16,8 @@ import static java.nio.charset.StandardCharsets.UTF_8; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.PicoCLIOptions; import java.io.File; @@ -39,7 +39,7 @@ public class BadCLIOptionsPlugin implements BesuPlugin { private File callbackDir; @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { LOG.info("Registering BadCliOptionsPlugin"); callbackDir = new File(System.getProperty("besu.plugins.dir", "plugins")); writeStatus("init"); diff --git a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestBesuEventsPlugin.java b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestBesuEventsPlugin.java index 44e728010cb..7a4a17cf711 100644 --- a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestBesuEventsPlugin.java +++ b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestBesuEventsPlugin.java @@ -14,8 +14,8 @@ */ package org.hyperledger.besu.tests.acceptance.plugins; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.data.BlockHeader; import org.hyperledger.besu.plugin.data.PropagatedBlockContext; import org.hyperledger.besu.plugin.services.BesuEvents; @@ -35,14 +35,14 @@ public class TestBesuEventsPlugin implements BesuPlugin { private static final Logger LOG = LoggerFactory.getLogger(TestBesuEventsPlugin.class); - private BesuContext context; + private ServiceManager context; private Optional subscriptionId; private final AtomicInteger blockCounter = new AtomicInteger(); private File callbackDir; @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { this.context = context; LOG.info("Registered"); callbackDir = new File(System.getProperty("besu.plugins.dir", "plugins")); diff --git a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestBlockchainServiceFinalizedPlugin.java b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestBlockchainServiceFinalizedPlugin.java index a61b80ab8e4..4984e7a00e8 100644 --- a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestBlockchainServiceFinalizedPlugin.java +++ b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestBlockchainServiceFinalizedPlugin.java @@ -17,8 +17,8 @@ import org.hyperledger.besu.datatypes.Hash; import org.hyperledger.besu.ethereum.api.jsonrpc.internal.parameters.JsonRpcParameter; import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.RpcErrorType; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.data.BlockContext; import org.hyperledger.besu.plugin.services.BlockchainService; import org.hyperledger.besu.plugin.services.RpcEndpointService; @@ -40,11 +40,11 @@ public class TestBlockchainServiceFinalizedPlugin implements BesuPlugin { private static final String RPC_METHOD_SAFE_BLOCK = "updateSafeBlockV1"; @Override - public void register(final BesuContext besuContext) { + public void register(final ServiceManager serviceManager) { LOG.trace("Registering plugin ..."); final RpcEndpointService rpcEndpointService = - besuContext + serviceManager .getService(RpcEndpointService.class) .orElseThrow( () -> @@ -52,7 +52,7 @@ public void register(final BesuContext besuContext) { "Failed to obtain RpcEndpointService from the BesuContext.")); final BlockchainService blockchainService = - besuContext + serviceManager .getService(BlockchainService.class) .orElseThrow( () -> diff --git a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestInProcessRpcServicePlugin.java b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestInProcessRpcServicePlugin.java index 3ebced0df91..adbc1a35792 100644 --- a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestInProcessRpcServicePlugin.java +++ b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestInProcessRpcServicePlugin.java @@ -15,8 +15,8 @@ package org.hyperledger.besu.tests.acceptance.plugins; import org.hyperledger.besu.datatypes.Wei; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.PicoCLIOptions; import org.hyperledger.besu.plugin.services.RpcEndpointService; import org.hyperledger.besu.plugin.services.rpc.RpcResponseType; @@ -36,7 +36,7 @@ public class TestInProcessRpcServicePlugin implements BesuPlugin { long minGasPrice = -1; @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { final PicoCLIOptions cmdlineOptions = context .getService(PicoCLIOptions.class) diff --git a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestMetricsPlugin.java b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestMetricsPlugin.java index af179c57cfe..9400fb4bccd 100644 --- a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestMetricsPlugin.java +++ b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestMetricsPlugin.java @@ -14,8 +14,8 @@ */ package org.hyperledger.besu.tests.acceptance.plugins; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.MetricsSystem; import org.hyperledger.besu.plugin.services.metrics.MetricCategory; import org.hyperledger.besu.plugin.services.metrics.MetricCategoryRegistry; @@ -30,12 +30,12 @@ @AutoService(BesuPlugin.class) public class TestMetricsPlugin implements BesuPlugin { private static final Logger LOG = LoggerFactory.getLogger(TestMetricsPlugin.class); - private BesuContext besuContext; + private ServiceManager serviceManager; @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { LOG.info("Registering TestMetricsPlugin"); - besuContext = context; + serviceManager = context; context .getService(MetricCategoryRegistry.class) .orElseThrow() @@ -45,7 +45,7 @@ public void register(final BesuContext context) { @Override public void start() { LOG.info("Starting TestMetricsPlugin"); - besuContext + serviceManager .getService(MetricsSystem.class) .orElseThrow() .createGauge( diff --git a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPermissioningPlugin.java b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPermissioningPlugin.java index 44afeeadaa5..c2503ed8112 100644 --- a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPermissioningPlugin.java +++ b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPermissioningPlugin.java @@ -14,8 +14,8 @@ */ package org.hyperledger.besu.tests.acceptance.plugins; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.PermissioningService; import org.hyperledger.besu.plugin.services.PicoCLIOptions; @@ -40,7 +40,7 @@ public class TestPermissioningPlugin implements BesuPlugin { PermissioningService service; @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { context.getService(PicoCLIOptions.class).orElseThrow().addPicoCLIOptions("permissioning", this); service = context.getService(PermissioningService.class).orElseThrow(); } diff --git a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPicoCLIPlugin.java b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPicoCLIPlugin.java index 375fbd490ec..bb83ba676db 100644 --- a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPicoCLIPlugin.java +++ b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPicoCLIPlugin.java @@ -14,8 +14,8 @@ */ package org.hyperledger.besu.tests.acceptance.plugins; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.PicoCLIOptions; import java.io.File; @@ -57,7 +57,7 @@ public class TestPicoCLIPlugin implements BesuPlugin { private File callbackDir; @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { LOG.info("Registering. Test Option is '{}'", testOption); state = "registering"; diff --git a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPrivacyServicePlugin.java b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPrivacyServicePlugin.java index 4cdd35e8dc4..698653f356f 100644 --- a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPrivacyServicePlugin.java +++ b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestPrivacyServicePlugin.java @@ -14,8 +14,8 @@ */ package org.hyperledger.besu.tests.acceptance.plugins; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.PicoCLIOptions; import org.hyperledger.besu.plugin.services.PrivacyPluginService; import org.hyperledger.besu.tests.acceptance.plugins.privacy.TestPrivacyGroupGenesisProvider; @@ -32,7 +32,7 @@ public class TestPrivacyServicePlugin implements BesuPlugin { private static final Logger LOG = LoggerFactory.getLogger(TestPrivacyServicePlugin.class); PrivacyPluginService pluginService; - BesuContext context; + ServiceManager context; TestPrivacyGroupGenesisProvider privacyGroupGenesisProvider = new TestPrivacyGroupGenesisProvider(); @@ -40,7 +40,7 @@ public class TestPrivacyServicePlugin implements BesuPlugin { new TestSigningPrivateMarkerTransactionFactory(); @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { this.context = context; context diff --git a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestRpcEndpointServicePlugin.java b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestRpcEndpointServicePlugin.java index 67980373ea2..75d72473bf1 100644 --- a/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestRpcEndpointServicePlugin.java +++ b/acceptance-tests/test-plugins/src/main/java/org/hyperledger/besu/tests/acceptance/plugins/TestRpcEndpointServicePlugin.java @@ -16,8 +16,8 @@ import static com.google.common.base.Preconditions.checkArgument; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.RpcEndpointService; import org.hyperledger.besu.plugin.services.rpc.PluginRpcRequest; @@ -51,7 +51,7 @@ private String throwException(final PluginRpcRequest request) { } @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { context .getService(RpcEndpointService.class) .ifPresent( 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 ad4dbd44819..fbee90edef9 100644 --- a/besu/src/main/java/org/hyperledger/besu/services/BesuPluginContextImpl.java +++ b/besu/src/main/java/org/hyperledger/besu/services/BesuPluginContextImpl.java @@ -18,8 +18,8 @@ import static com.google.common.base.Preconditions.checkState; import org.hyperledger.besu.ethereum.core.plugins.PluginConfiguration; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.BesuService; import org.hyperledger.besu.plugin.services.PluginVersionsProvider; @@ -49,7 +49,7 @@ import org.slf4j.LoggerFactory; /** The Besu plugin context implementation. */ -public class BesuPluginContextImpl implements BesuContext, PluginVersionsProvider { +public class BesuPluginContextImpl implements ServiceManager, PluginVersionsProvider { private static final Logger LOG = LoggerFactory.getLogger(BesuPluginContextImpl.class); diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/bonsai/BonsaiWorldStateProvider.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/bonsai/BonsaiWorldStateProvider.java index 96a56da6e20..1e2f62addbb 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/bonsai/BonsaiWorldStateProvider.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/bonsai/BonsaiWorldStateProvider.java @@ -28,7 +28,7 @@ import org.hyperledger.besu.ethereum.trie.patricia.StoredMerklePatriciaTrie; import org.hyperledger.besu.ethereum.worldstate.StateTrieAccountValue; import org.hyperledger.besu.evm.internal.EvmConfiguration; -import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.ServiceManager; import java.util.HashSet; import java.util.Optional; @@ -52,7 +52,7 @@ public BonsaiWorldStateProvider( final Blockchain blockchain, final Optional maxLayersToLoad, final BonsaiCachedMerkleTrieLoader bonsaiCachedMerkleTrieLoader, - final BesuContext pluginContext, + final ServiceManager pluginContext, final EvmConfiguration evmConfiguration, final Supplier worldStateHealerSupplier) { super(worldStateKeyValueStorage, blockchain, maxLayersToLoad, pluginContext); diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/DiffBasedWorldStateProvider.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/DiffBasedWorldStateProvider.java index 75b370c1cd0..70e077a41b8 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/DiffBasedWorldStateProvider.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/DiffBasedWorldStateProvider.java @@ -31,7 +31,7 @@ import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive; import org.hyperledger.besu.ethereum.worldstate.WorldStateStorageCoordinator; import org.hyperledger.besu.evm.worldstate.WorldState; -import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.trielogs.TrieLog; import java.util.ArrayList; @@ -61,7 +61,7 @@ public DiffBasedWorldStateProvider( final DiffBasedWorldStateKeyValueStorage worldStateKeyValueStorage, final Blockchain blockchain, final Optional maxLayersToLoad, - final BesuContext pluginContext) { + final ServiceManager pluginContext) { this.worldStateKeyValueStorage = worldStateKeyValueStorage; // TODO: de-dup constructors diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/trielog/TrieLogManager.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/trielog/TrieLogManager.java index 70d45f546db..903a4a5f3ed 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/trielog/TrieLogManager.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/trie/diffbased/common/trielog/TrieLogManager.java @@ -21,7 +21,7 @@ import org.hyperledger.besu.ethereum.trie.diffbased.common.storage.DiffBasedWorldStateKeyValueStorage; import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.DiffBasedWorldState; import org.hyperledger.besu.ethereum.trie.diffbased.common.worldview.accumulator.DiffBasedWorldStateUpdateAccumulator; -import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.TrieLogService; import org.hyperledger.besu.plugin.services.trielogs.TrieLog; import org.hyperledger.besu.plugin.services.trielogs.TrieLogEvent; @@ -53,7 +53,7 @@ public TrieLogManager( final Blockchain blockchain, final DiffBasedWorldStateKeyValueStorage worldStateKeyValueStorage, final long maxLayersToLoad, - final BesuContext pluginContext) { + final ServiceManager pluginContext) { this.blockchain = blockchain; this.rootWorldStateStorage = worldStateKeyValueStorage; this.maxLayersToLoad = maxLayersToLoad; @@ -133,7 +133,7 @@ public synchronized void unsubscribe(final long id) { trieLogObservers.unsubscribe(id); } - private TrieLogFactory setupTrieLogFactory(final BesuContext pluginContext) { + private TrieLogFactory setupTrieLogFactory(final ServiceManager pluginContext) { // if we have a TrieLogService from pluginContext, use it. var trieLogServicez = Optional.ofNullable(pluginContext) diff --git a/plugin-api/build.gradle b/plugin-api/build.gradle index 8242189db71..333cac59268 100644 --- a/plugin-api/build.gradle +++ b/plugin-api/build.gradle @@ -71,7 +71,7 @@ Calculated : ${currentHash} tasks.register('checkAPIChanges', FileStateChecker) { description = "Checks that the API for the Plugin-API project does not change without deliberate thought" files = sourceSets.main.allJava.files - knownHash = 'ktVrmQXU7LMQi1ieb9OQ2vJNqZ0SVQ7Usauh1LMvUXY=' + knownHash = 'wOjR3/uPElPs1GonuLMBWStn1zukFMyy/GfQ9OYChpI=' } check.dependsOn('checkAPIChanges') diff --git a/plugin-api/src/main/java/org/hyperledger/besu/plugin/BesuContext.java b/plugin-api/src/main/java/org/hyperledger/besu/plugin/BesuContext.java index 71b3612e51e..2f1d0e9ac3c 100644 --- a/plugin-api/src/main/java/org/hyperledger/besu/plugin/BesuContext.java +++ b/plugin-api/src/main/java/org/hyperledger/besu/plugin/BesuContext.java @@ -14,42 +14,6 @@ */ package org.hyperledger.besu.plugin; -import org.hyperledger.besu.plugin.services.BesuService; - -import java.util.Optional; - -/** Allows plugins to access Besu services. */ -public interface BesuContext { - - /** - * Add service. - * - * @param the type parameter - * @param serviceType the service type - * @param service the service - */ - void addService(final Class serviceType, final T service); - - /** - * Get the requested service, if it is available. There are a number of reasons that a service may - * not be available: - * - *
    - *
  • The service may not have started yet. Most services are not available before the {@link - * BesuPlugin#start()} method is called - *
  • The service is not supported by this version of Besu - *
  • The service may not be applicable to the current configuration. For example some services - * may only be available when a proof of authority network is in use - *
- * - *

Since plugins are automatically loaded, unless the user has specifically requested - * functionality provided by the plugin, no error should be raised if required services are - * unavailable. - * - * @param serviceType the class defining the requested service. - * @param the service type - * @return an optional containing the instance of the requested service, or empty if the service - * is unavailable - */ - Optional getService(Class serviceType); -} +/** Deprecated in favor of the more precisely named ServiceManager interface. */ +@Deprecated(since = "24.11.0", forRemoval = true) +public interface BesuContext extends ServiceManager {} diff --git a/plugin-api/src/main/java/org/hyperledger/besu/plugin/BesuPlugin.java b/plugin-api/src/main/java/org/hyperledger/besu/plugin/BesuPlugin.java index 1d7acf3a3ee..b05fbf83c09 100644 --- a/plugin-api/src/main/java/org/hyperledger/besu/plugin/BesuPlugin.java +++ b/plugin-api/src/main/java/org/hyperledger/besu/plugin/BesuPlugin.java @@ -48,7 +48,7 @@ default Optional getName() { * * @param context the context that provides access to Besu services. */ - void register(BesuContext context); + void register(ServiceManager context); /** * Called once when besu has loaded configuration but before external services have been started diff --git a/plugin-api/src/main/java/org/hyperledger/besu/plugin/ServiceManager.java b/plugin-api/src/main/java/org/hyperledger/besu/plugin/ServiceManager.java new file mode 100644 index 00000000000..99630f27390 --- /dev/null +++ b/plugin-api/src/main/java/org/hyperledger/besu/plugin/ServiceManager.java @@ -0,0 +1,55 @@ +/* + * Copyright ConsenSys AG. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.hyperledger.besu.plugin; + +import org.hyperledger.besu.plugin.services.BesuService; + +import java.util.Optional; + +/** Adds and accesses BesuServices for plugins to provide or use. */ +public interface ServiceManager { + + /** + * Add service. Used by core besu or other plugins to add services to the service manager. + * + * @param the type parameter + * @param serviceType the service type + * @param service the service + */ + void addService(final Class serviceType, final T service); + + /** + * Get the requested service, if it is available. There are a number of reasons that a service may + * not be available: + * + *

    + *
  • The service may not have started yet. Most services are not available before the {@link + * BesuPlugin#start()} method is called + *
  • The service is not supported by this version of Besu + *
  • The service may not be applicable to the current configuration. For example some services + * may only be available when a proof of authority network is in use, or when user provided. + *
+ * + *

Since plugins are automatically loaded, unless the user has specifically requested + * functionality provided by the plugin, no error should be raised if required services are + * unavailable. + * + * @param serviceType the class defining the requested service. + * @param the service type + * @return an optional containing the instance of the requested service, or empty if the service + * is unavailable + */ + Optional getService(Class serviceType); +} diff --git a/plugin-api/src/main/java/org/hyperledger/besu/plugin/services/BesuService.java b/plugin-api/src/main/java/org/hyperledger/besu/plugin/services/BesuService.java index 62340dd59d6..bb9c5e1cdae 100644 --- a/plugin-api/src/main/java/org/hyperledger/besu/plugin/services/BesuService.java +++ b/plugin-api/src/main/java/org/hyperledger/besu/plugin/services/BesuService.java @@ -14,10 +14,10 @@ */ package org.hyperledger.besu.plugin.services; -import org.hyperledger.besu.plugin.BesuContext; +import org.hyperledger.besu.plugin.ServiceManager; /** - * All services that can be resolved via {@link BesuContext#getService(Class)} must implement {@link - * BesuService} + * All services that can be resolved via {@link ServiceManager#getService(Class)} must implement + * {@link BesuService} */ public interface BesuService {} diff --git a/plugins/rocksdb/src/main/java/org/hyperledger/besu/plugin/services/storage/rocksdb/RocksDBPlugin.java b/plugins/rocksdb/src/main/java/org/hyperledger/besu/plugin/services/storage/rocksdb/RocksDBPlugin.java index 9e11bd634b8..91e6e427bc3 100644 --- a/plugins/rocksdb/src/main/java/org/hyperledger/besu/plugin/services/storage/rocksdb/RocksDBPlugin.java +++ b/plugins/rocksdb/src/main/java/org/hyperledger/besu/plugin/services/storage/rocksdb/RocksDBPlugin.java @@ -14,8 +14,8 @@ */ package org.hyperledger.besu.plugin.services.storage.rocksdb; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.PicoCLIOptions; import org.hyperledger.besu.plugin.services.StorageService; import org.hyperledger.besu.plugin.services.storage.SegmentIdentifier; @@ -40,7 +40,7 @@ public class RocksDBPlugin implements BesuPlugin { private final RocksDBCLIOptions options; private final List ignorableSegments = new ArrayList<>(); - private BesuContext context; + private ServiceManager context; private RocksDBKeyValueStorageFactory factory; private RocksDBKeyValuePrivacyStorageFactory privacyFactory; @@ -59,7 +59,7 @@ public void addIgnorableSegmentIdentifier(final SegmentIdentifier ignorable) { } @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { LOG.debug("Registering plugin"); this.context = context; diff --git a/services/kvstore/src/main/java/org/hyperledger/besu/services/kvstore/InMemoryStoragePlugin.java b/services/kvstore/src/main/java/org/hyperledger/besu/services/kvstore/InMemoryStoragePlugin.java index 6783a82c1c4..11e7656dfb7 100644 --- a/services/kvstore/src/main/java/org/hyperledger/besu/services/kvstore/InMemoryStoragePlugin.java +++ b/services/kvstore/src/main/java/org/hyperledger/besu/services/kvstore/InMemoryStoragePlugin.java @@ -14,8 +14,8 @@ */ package org.hyperledger.besu.services.kvstore; -import org.hyperledger.besu.plugin.BesuContext; import org.hyperledger.besu.plugin.BesuPlugin; +import org.hyperledger.besu.plugin.ServiceManager; import org.hyperledger.besu.plugin.services.BesuConfiguration; import org.hyperledger.besu.plugin.services.MetricsSystem; import org.hyperledger.besu.plugin.services.StorageService; @@ -36,7 +36,7 @@ public class InMemoryStoragePlugin implements BesuPlugin { private static final Logger LOG = LoggerFactory.getLogger(InMemoryStoragePlugin.class); - private BesuContext context; + private ServiceManager context; private InMemoryKeyValueStorageFactory factory; private InMemoryKeyValueStorageFactory privacyFactory; @@ -44,7 +44,7 @@ public class InMemoryStoragePlugin implements BesuPlugin { public InMemoryStoragePlugin() {} @Override - public void register(final BesuContext context) { + public void register(final ServiceManager context) { LOG.debug("Registering plugin"); this.context = context;