From 4c64dbe1cd678efabcda798ae8bebe43e844a5d7 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 08:15:35 +1000 Subject: [PATCH] 7311: Add feature toggle for enabling use of the peertask system where available Signed-off-by: Matilda Clerke --- .../org/hyperledger/besu/cli/BesuCommand.java | 10 ++++ .../cli/custom/PeerTaskFeatureToggle.java | 53 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java diff --git a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java index ecfc0eaadb..a6e7712724 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -40,6 +40,7 @@ import org.hyperledger.besu.cli.converter.MetricCategoryConverter; import org.hyperledger.besu.cli.converter.PercentageConverter; import org.hyperledger.besu.cli.converter.SubnetInfoConverter; import org.hyperledger.besu.cli.custom.JsonRPCAllowlistHostsProperty; +import org.hyperledger.besu.cli.custom.PeerTaskFeatureToggle; import org.hyperledger.besu.cli.error.BesuExecutionExceptionHandler; import org.hyperledger.besu.cli.error.BesuParameterExceptionHandler; import org.hyperledger.besu.cli.options.MiningOptions; @@ -842,6 +843,12 @@ public class BesuCommand implements DefaultCommandValues, Runnable { description = "Specifies the number of last blocks to cache (default: ${DEFAULT-VALUE})") private final Integer numberOfblocksToCache = 0; + @Option( + names = {"--peertask-system-enabled"}, + description = + "Temporary feature toggle to enable using the new peertask system (default: ${DEFAULT-VALUE})") + private final Boolean isPeerTaskSystemEnabled = false; + @Mixin private P2PTLSConfigOptions p2pTLSConfigOptions; // Plugins Configuration Option Group @@ -1784,6 +1791,9 @@ public class BesuCommand implements DefaultCommandValues, Runnable { instantiateSignatureAlgorithmFactory(); + PeerTaskFeatureToggle.initialize(isPeerTaskSystemEnabled); + logger.info("PeerTask feature toggle is {}", PeerTaskFeatureToggle.usePeerTaskSystem() ? "enabled" : "disabled"); + logger.info(generateConfigurationOverview()); logger.info("Security Module: {}", securityModuleName); } diff --git a/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java b/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java new file mode 100644 index 0000000000..0d929f006a --- /dev/null +++ b/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java @@ -0,0 +1,53 @@ +/* + * Copyright contributors to Hyperledger Besu. + * + * 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.cli.custom; + +/** + * Temporary class to allow easy access to the PeerTask feature toggle. This class can be removed + * once we've properly tested the PeerTask system and want to enable it permanently + */ +public class PeerTaskFeatureToggle { + private static Boolean USE_PEER_TASK_SYSTEM = null; + + /** + * Initialize the PeerTaskFeatureToggle with the supplied usePeerTaskSystem Boolean. + * PeerTaskFeatureToggle may only be initialized once! + * + * @param usePeerTaskSystem Boolean indicating whether or not the PeerTask system should be used + * @throws IllegalStateException if PeerTaskFeatureToggle has already been initialized + */ + public static void initialize(final Boolean usePeerTaskSystem) { + if (USE_PEER_TASK_SYSTEM != null) { + throw new IllegalStateException( + "PeerTaskFeatureToggle has already been initialized, and cannot be initialized again"); + } + USE_PEER_TASK_SYSTEM = usePeerTaskSystem; + } + + /** + * Indicates whether or not to use the PeerTask system. PeerTaskFeatureToggle must have been + * initialized before this method can be called! + * + * @return whether or not to use the PeerTask system + * @throws IllegalStateException if the PeerTaskFeatureToggle has not been initialized + */ + public static Boolean usePeerTaskSystem() { + if (USE_PEER_TASK_SYSTEM == null) { + throw new IllegalStateException( + "PeerTaskFeatureToggle has not been initialized, but getUsePeerTaskSystem() has been called"); + } + return USE_PEER_TASK_SYSTEM; + } +}