From 4c64dbe1cd678efabcda798ae8bebe43e844a5d7 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 08:15:35 +1000 Subject: [PATCH 01/14] 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 ecfc0eaadb2..a6e77127248 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.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 @@ static class PrivacyOptionGroup { 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 @@ private void configure() throws Exception { 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 00000000000..0d929f006ac --- /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; + } +} From 7a94fe2d6d5666def85c6db4f1d3d4d2385e4df8 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 08:32:54 +1000 Subject: [PATCH 02/14] 7311: Remove log used for testing, apply spotless Signed-off-by: Matilda Clerke --- besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java | 1 - 1 file changed, 1 deletion(-) 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 a6e77127248..cee8a49c882 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -1792,7 +1792,6 @@ private void configure() throws Exception { instantiateSignatureAlgorithmFactory(); PeerTaskFeatureToggle.initialize(isPeerTaskSystemEnabled); - logger.info("PeerTask feature toggle is {}", PeerTaskFeatureToggle.usePeerTaskSystem() ? "enabled" : "disabled"); logger.info(generateConfigurationOverview()); logger.info("Security Module: {}", securityModuleName); From ace5dd1918836cb2b881d171a570ba9e2916be35 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 08:52:20 +1000 Subject: [PATCH 03/14] 7311: Add private constructor to PeerTaskFeatureToggle to prevent instantiation Signed-off-by: Matilda Clerke --- .../org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java | 2 ++ 1 file changed, 2 insertions(+) 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 index 0d929f006ac..a817e84e3d4 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java @@ -50,4 +50,6 @@ public static Boolean usePeerTaskSystem() { } return USE_PEER_TASK_SYSTEM; } + + private PeerTaskFeatureToggle() {} } From 52d440afbe3c5c3b785831495672ec7ef912a381 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 09:16:14 +1000 Subject: [PATCH 04/14] 7311: Switch to logging a warning instead of throwing an exception when initializing PeerTaskFeatureToggle multiple times Signed-off-by: Matilda Clerke --- .../besu/cli/custom/PeerTaskFeatureToggle.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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 index a817e84e3d4..a6fc636fb5f 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java @@ -14,11 +14,15 @@ */ package org.hyperledger.besu.cli.custom; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 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 final Logger LOGGER = LoggerFactory.getLogger(PeerTaskFeatureToggle.class); private static Boolean USE_PEER_TASK_SYSTEM = null; /** @@ -30,10 +34,10 @@ public class PeerTaskFeatureToggle { */ 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"); + LOGGER.warn("PeerTaskFeatureToggle has already been initialized, and cannot be initialized again"); + } else { + USE_PEER_TASK_SYSTEM = usePeerTaskSystem; } - USE_PEER_TASK_SYSTEM = usePeerTaskSystem; } /** From f392a0feda02546a8deb48f7158b7003f29fb498 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 09:16:34 +1000 Subject: [PATCH 05/14] 7311: Update javadoc to match previous commit Signed-off-by: Matilda Clerke --- .../org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java | 1 - 1 file changed, 1 deletion(-) 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 index a6fc636fb5f..19e66a92081 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java @@ -30,7 +30,6 @@ public class PeerTaskFeatureToggle { * 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) { From 2fb2690e0109a9bec8126d8305be04ceb4536dbc Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 09:22:47 +1000 Subject: [PATCH 06/14] 7311: spotless Signed-off-by: Matilda Clerke --- .../org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 index 19e66a92081..b1035cfd071 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java @@ -33,7 +33,8 @@ public class PeerTaskFeatureToggle { */ public static void initialize(final Boolean usePeerTaskSystem) { if (USE_PEER_TASK_SYSTEM != null) { - LOGGER.warn("PeerTaskFeatureToggle has already been initialized, and cannot be initialized again"); + LOGGER.warn( + "PeerTaskFeatureToggle has already been initialized, and cannot be initialized again"); } else { USE_PEER_TASK_SYSTEM = usePeerTaskSystem; } From f14aaebef6ebf404753cc2c9561aa5422d85f2df Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 10:24:10 +1000 Subject: [PATCH 07/14] 7311: Fix broken BesuCommandTest Signed-off-by: Matilda Clerke --- besu/src/test/resources/everything_config.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/besu/src/test/resources/everything_config.toml b/besu/src/test/resources/everything_config.toml index e3d7a3f28d3..73a17754623 100644 --- a/besu/src/test/resources/everything_config.toml +++ b/besu/src/test/resources/everything_config.toml @@ -226,6 +226,7 @@ Xsecp256k1-native-enabled=false Xaltbn128-native-enabled=false Xsnapsync-server-enabled=true Xbonsai-full-flat-db-enabled=true +peertask-system-enabled=false # compatibility flags compatibility-eth64-forkid-enabled=false From f2500dd4d8f7af04d481ddfb61f1b038d02dc989 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 11:40:59 +1000 Subject: [PATCH 08/14] 7311: Move PeerTaskFeatureToggle to more appropriate location Signed-off-by: Matilda Clerke --- besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java | 2 +- .../ethereum/eth/manager/peertask}/PeerTaskFeatureToggle.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename {besu/src/main/java/org/hyperledger/besu/cli/custom => ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/peertask}/PeerTaskFeatureToggle.java (97%) 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 cee8a49c882..b37bb791467 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -40,7 +40,6 @@ 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; @@ -118,6 +117,7 @@ import org.hyperledger.besu.ethereum.core.PrivacyParameters; import org.hyperledger.besu.ethereum.core.VersionMetadata; import org.hyperledger.besu.ethereum.core.plugins.PluginConfiguration; +import org.hyperledger.besu.ethereum.eth.manager.peertask.PeerTaskFeatureToggle; import org.hyperledger.besu.ethereum.eth.sync.SyncMode; import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration; diff --git a/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/peertask/PeerTaskFeatureToggle.java similarity index 97% rename from besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java rename to ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/peertask/PeerTaskFeatureToggle.java index b1035cfd071..24cc63b84c4 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/custom/PeerTaskFeatureToggle.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/peertask/PeerTaskFeatureToggle.java @@ -12,7 +12,7 @@ * * SPDX-License-Identifier: Apache-2.0 */ -package org.hyperledger.besu.cli.custom; +package org.hyperledger.besu.ethereum.eth.manager.peertask; import org.slf4j.Logger; import org.slf4j.LoggerFactory; From 33b810b40d3a194e5be1f9e3689c106e37eff503 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 11:43:36 +1000 Subject: [PATCH 09/14] 7311: add X prefix to peertask-system-enabled Signed-off-by: Matilda Clerke --- besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java | 2 +- besu/src/test/resources/everything_config.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 b37bb791467..ba1eb4b0a27 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -844,7 +844,7 @@ static class PrivacyOptionGroup { private final Integer numberOfblocksToCache = 0; @Option( - names = {"--peertask-system-enabled"}, + names = {"--Xpeertask-system-enabled"}, description = "Temporary feature toggle to enable using the new peertask system (default: ${DEFAULT-VALUE})") private final Boolean isPeerTaskSystemEnabled = false; diff --git a/besu/src/test/resources/everything_config.toml b/besu/src/test/resources/everything_config.toml index 73a17754623..d28152b47cd 100644 --- a/besu/src/test/resources/everything_config.toml +++ b/besu/src/test/resources/everything_config.toml @@ -226,7 +226,7 @@ Xsecp256k1-native-enabled=false Xaltbn128-native-enabled=false Xsnapsync-server-enabled=true Xbonsai-full-flat-db-enabled=true -peertask-system-enabled=false +Xpeertask-system-enabled=false # compatibility flags compatibility-eth64-forkid-enabled=false From 15b6bdf712f32601ae37adc984a5c53f629fa523 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 12:39:54 +1000 Subject: [PATCH 10/14] 7311: Move --Xpeertask-system-enabled out of BesuCommand and make hidden Signed-off-by: Matilda Clerke --- .../java/org/hyperledger/besu/cli/BesuCommand.java | 8 -------- .../besu/cli/options/stable/P2PTLSConfigOptions.java | 10 ++++++++++ 2 files changed, 10 insertions(+), 8 deletions(-) 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 ba1eb4b0a27..e103f1e68dd 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -843,12 +843,6 @@ static class PrivacyOptionGroup { description = "Specifies the number of last blocks to cache (default: ${DEFAULT-VALUE})") private final Integer numberOfblocksToCache = 0; - @Option( - names = {"--Xpeertask-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 @@ -1791,8 +1785,6 @@ private void configure() throws Exception { instantiateSignatureAlgorithmFactory(); - PeerTaskFeatureToggle.initialize(isPeerTaskSystemEnabled); - logger.info(generateConfigurationOverview()); logger.info("Security Module: {}", securityModuleName); } diff --git a/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java b/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java index c3f8c56219f..440d65b5a2f 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java @@ -20,6 +20,7 @@ import org.hyperledger.besu.cli.util.CommandLineUtils; import org.hyperledger.besu.ethereum.api.tls.FileBasedPasswordProvider; +import org.hyperledger.besu.ethereum.eth.manager.peertask.PeerTaskFeatureToggle; import org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.TLSConfiguration; import java.nio.file.Path; @@ -103,6 +104,13 @@ public class P2PTLSConfigOptions { "Whether to send a SNI header in the TLS ClientHello message (default: ${DEFAULT-VALUE})") private final Boolean p2pTlsClientHelloSniHeaderEnabled = false; + @Option( + names = {"--Xpeertask-system-enabled"}, + hidden = true, + description = + "Temporary feature toggle to enable using the new peertask system (default: ${DEFAULT-VALUE})") + private final Boolean isPeerTaskSystemEnabled = false; + /** Default constructor. */ P2PTLSConfigOptions() {} @@ -128,6 +136,8 @@ public Optional p2pTLSConfiguration(final CommandLine commandL "File containing password to unlock keystore is required when p2p TLS is enabled"); } + PeerTaskFeatureToggle.initialize(isPeerTaskSystemEnabled); + return Optional.of( TLSConfiguration.Builder.tlsConfiguration() .withKeyStoreType(p2pTLSKeyStoreType) From e3fbc6ca48bea501bf48dbb05543d3289e014e93 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Wed, 18 Sep 2024 12:44:20 +1000 Subject: [PATCH 11/14] 7311: spotless Signed-off-by: Matilda Clerke --- .../main/java/org/hyperledger/besu/cli/BesuCommand.java | 1 - .../besu/cli/options/stable/P2PTLSConfigOptions.java | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) 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 e103f1e68dd..ecfc0eaadb2 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -117,7 +117,6 @@ import org.hyperledger.besu.ethereum.core.PrivacyParameters; import org.hyperledger.besu.ethereum.core.VersionMetadata; import org.hyperledger.besu.ethereum.core.plugins.PluginConfiguration; -import org.hyperledger.besu.ethereum.eth.manager.peertask.PeerTaskFeatureToggle; import org.hyperledger.besu.ethereum.eth.sync.SyncMode; import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration; diff --git a/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java b/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java index 440d65b5a2f..a48b177bba3 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java @@ -105,10 +105,10 @@ public class P2PTLSConfigOptions { private final Boolean p2pTlsClientHelloSniHeaderEnabled = false; @Option( - names = {"--Xpeertask-system-enabled"}, - hidden = true, - description = - "Temporary feature toggle to enable using the new peertask system (default: ${DEFAULT-VALUE})") + names = {"--Xpeertask-system-enabled"}, + hidden = true, + description = + "Temporary feature toggle to enable using the new peertask system (default: ${DEFAULT-VALUE})") private final Boolean isPeerTaskSystemEnabled = false; /** Default constructor. */ From 513b74f6d41c5854619b92be88ebd62480c5b8cf Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Thu, 19 Sep 2024 14:41:36 +1000 Subject: [PATCH 12/14] 7311: Move isPeerTaskSystemEnabled to SynchronizerOptions Signed-off-by: Matilda Clerke --- .../java/org/hyperledger/besu/cli/BesuCommand.java | 3 +++ .../besu/cli/options/stable/P2PTLSConfigOptions.java | 10 ---------- .../cli/options/unstable/SynchronizerOptions.java | 11 +++++++++++ 3 files changed, 14 insertions(+), 10 deletions(-) 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 ecfc0eaadb2..ef3bb6d6f8d 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -117,6 +117,7 @@ import org.hyperledger.besu.ethereum.core.PrivacyParameters; import org.hyperledger.besu.ethereum.core.VersionMetadata; import org.hyperledger.besu.ethereum.core.plugins.PluginConfiguration; +import org.hyperledger.besu.ethereum.eth.manager.peertask.PeerTaskFeatureToggle; import org.hyperledger.besu.ethereum.eth.sync.SyncMode; import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration; @@ -1784,6 +1785,8 @@ private void configure() throws Exception { instantiateSignatureAlgorithmFactory(); + PeerTaskFeatureToggle.initialize(unstableSynchronizerOptions.isPeerTaskSystemEnabled()); + logger.info(generateConfigurationOverview()); logger.info("Security Module: {}", securityModuleName); } diff --git a/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java b/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java index a48b177bba3..c3f8c56219f 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/options/stable/P2PTLSConfigOptions.java @@ -20,7 +20,6 @@ import org.hyperledger.besu.cli.util.CommandLineUtils; import org.hyperledger.besu.ethereum.api.tls.FileBasedPasswordProvider; -import org.hyperledger.besu.ethereum.eth.manager.peertask.PeerTaskFeatureToggle; import org.hyperledger.besu.ethereum.p2p.rlpx.connections.netty.TLSConfiguration; import java.nio.file.Path; @@ -104,13 +103,6 @@ public class P2PTLSConfigOptions { "Whether to send a SNI header in the TLS ClientHello message (default: ${DEFAULT-VALUE})") private final Boolean p2pTlsClientHelloSniHeaderEnabled = false; - @Option( - names = {"--Xpeertask-system-enabled"}, - hidden = true, - description = - "Temporary feature toggle to enable using the new peertask system (default: ${DEFAULT-VALUE})") - private final Boolean isPeerTaskSystemEnabled = false; - /** Default constructor. */ P2PTLSConfigOptions() {} @@ -136,8 +128,6 @@ public Optional p2pTLSConfiguration(final CommandLine commandL "File containing password to unlock keystore is required when p2p TLS is enabled"); } - PeerTaskFeatureToggle.initialize(isPeerTaskSystemEnabled); - return Optional.of( TLSConfiguration.Builder.tlsConfiguration() .withKeyStoreType(p2pTLSKeyStoreType) diff --git a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java index 95bbe0a2b1f..6d293be8d0e 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java @@ -314,6 +314,13 @@ public void parseBlockPropagationRange(final String arg) { description = "Snap sync enabled for BFT chains (default: ${DEFAULT-VALUE})") private Boolean snapsyncBftEnabled = SnapSyncConfiguration.DEFAULT_SNAP_SYNC_BFT_ENABLED; + @CommandLine.Option( + names = {"--Xpeertask-system-enabled"}, + hidden = true, + description = + "Temporary feature toggle to enable using the new peertask system (default: ${DEFAULT-VALUE})") + private final Boolean isPeerTaskSystemEnabled = false; + private SynchronizerOptions() {} /** @@ -334,6 +341,10 @@ public boolean isSnapSyncBftEnabled() { return snapsyncBftEnabled; } + public boolean isPeerTaskSystemEnabled() { + return isPeerTaskSystemEnabled; + } + /** * Create synchronizer options. * From 2364ed5a52a94c14fbcac5354f8190ad291ab8d9 Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Thu, 19 Sep 2024 14:54:18 +1000 Subject: [PATCH 13/14] 7311: Fix javadoc issue Signed-off-by: Matilda Clerke --- .../besu/cli/options/unstable/SynchronizerOptions.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java index 6d293be8d0e..4121f32d214 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java @@ -341,6 +341,11 @@ public boolean isSnapSyncBftEnabled() { return snapsyncBftEnabled; } + /** + * Flag to indicate whether the peer task system should be used where available + * + * @return true if the peer task system should be used where available + */ public boolean isPeerTaskSystemEnabled() { return isPeerTaskSystemEnabled; } From 6e734f95a8c11dd054f94200dc3e6141462c451c Mon Sep 17 00:00:00 2001 From: Matilda Clerke Date: Fri, 20 Sep 2024 11:32:30 +1000 Subject: [PATCH 14/14] 7311: Remove PeerTaskFeatureToggle in favor of including isPeerTaskSystemEnabled in SynchronizerConfiguration Signed-off-by: Matilda Clerke --- .../org/hyperledger/besu/cli/BesuCommand.java | 3 - .../options/unstable/SynchronizerOptions.java | 2 +- .../peertask/PeerTaskFeatureToggle.java | 59 ------------------- .../eth/sync/SynchronizerConfiguration.java | 18 +++++- 4 files changed, 17 insertions(+), 65 deletions(-) delete mode 100644 ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/peertask/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 8d2bba300b3..79879538bd5 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/BesuCommand.java @@ -119,7 +119,6 @@ import org.hyperledger.besu.ethereum.core.PrivacyParameters; import org.hyperledger.besu.ethereum.core.VersionMetadata; import org.hyperledger.besu.ethereum.core.plugins.PluginConfiguration; -import org.hyperledger.besu.ethereum.eth.manager.peertask.PeerTaskFeatureToggle; import org.hyperledger.besu.ethereum.eth.sync.SyncMode; import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; import org.hyperledger.besu.ethereum.eth.transactions.ImmutableTransactionPoolConfiguration; @@ -1925,8 +1924,6 @@ private void configure() throws Exception { instantiateSignatureAlgorithmFactory(); - PeerTaskFeatureToggle.initialize(unstableSynchronizerOptions.isPeerTaskSystemEnabled()); - logger.info(generateConfigurationOverview()); logger.info("Security Module: {}", securityModuleName); } diff --git a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java index 4121f32d214..816d9df00a1 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/options/unstable/SynchronizerOptions.java @@ -436,7 +436,7 @@ public SynchronizerConfiguration.Builder toDomainObject() { .isSnapSyncBftEnabled(snapsyncBftEnabled) .build()); builder.checkpointPostMergeEnabled(checkpointPostMergeSyncEnabled); - + builder.isPeerTaskSystemEnabled(isPeerTaskSystemEnabled); return builder; } diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/peertask/PeerTaskFeatureToggle.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/peertask/PeerTaskFeatureToggle.java deleted file mode 100644 index 24cc63b84c4..00000000000 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/manager/peertask/PeerTaskFeatureToggle.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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.ethereum.eth.manager.peertask; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * 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 final Logger LOGGER = LoggerFactory.getLogger(PeerTaskFeatureToggle.class); - 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 - */ - public static void initialize(final Boolean usePeerTaskSystem) { - if (USE_PEER_TASK_SYSTEM != null) { - LOGGER.warn( - "PeerTaskFeatureToggle has already been initialized, and cannot be initialized again"); - } else { - 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; - } - - private PeerTaskFeatureToggle() {} -} diff --git a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/SynchronizerConfiguration.java b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/SynchronizerConfiguration.java index d46da85dc48..d72f76c213c 100644 --- a/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/SynchronizerConfiguration.java +++ b/ethereum/eth/src/main/java/org/hyperledger/besu/ethereum/eth/sync/SynchronizerConfiguration.java @@ -85,6 +85,7 @@ public class SynchronizerConfiguration { private final int maxTrailingPeers; private final long worldStateMinMillisBeforeStalling; private final long propagationManagerGetBlockTimeoutMillis; + private final boolean isPeerTaskSystemEnabled; private SynchronizerConfiguration( final int syncPivotDistance, @@ -108,7 +109,8 @@ private SynchronizerConfiguration( final int computationParallelism, final int maxTrailingPeers, final long propagationManagerGetBlockTimeoutMillis, - final boolean checkpointPostMergeEnabled) { + final boolean checkpointPostMergeEnabled, + final boolean isPeerTaskSystemEnabled) { this.syncPivotDistance = syncPivotDistance; this.fastSyncFullValidationRate = fastSyncFullValidationRate; this.syncMinimumPeerCount = syncMinimumPeerCount; @@ -131,6 +133,7 @@ private SynchronizerConfiguration( this.maxTrailingPeers = maxTrailingPeers; this.propagationManagerGetBlockTimeoutMillis = propagationManagerGetBlockTimeoutMillis; this.checkpointPostMergeEnabled = checkpointPostMergeEnabled; + this.isPeerTaskSystemEnabled = isPeerTaskSystemEnabled; } public static Builder builder() { @@ -256,6 +259,10 @@ public long getPropagationManagerGetBlockTimeoutMillis() { return propagationManagerGetBlockTimeoutMillis; } + public boolean isPeerTaskSystemEnabled() { + return isPeerTaskSystemEnabled; + } + public static class Builder { private SyncMode syncMode = SyncMode.FULL; private int syncMinimumPeerCount = DEFAULT_SYNC_MINIMUM_PEERS; @@ -280,6 +287,7 @@ public static class Builder { DEFAULT_WORLD_STATE_MAX_REQUESTS_WITHOUT_PROGRESS; private long worldStateMinMillisBeforeStalling = DEFAULT_WORLD_STATE_MIN_MILLIS_BEFORE_STALLING; private int worldStateTaskCacheSize = DEFAULT_WORLD_STATE_TASK_CACHE_SIZE; + private boolean isPeerTaskSystemEnabled = false; private long propagationManagerGetBlockTimeoutMillis = DEFAULT_PROPAGATION_MANAGER_GET_BLOCK_TIMEOUT_MILLIS; @@ -406,6 +414,11 @@ public Builder checkpointPostMergeEnabled(final boolean checkpointPostMergeEnabl return this; } + public Builder isPeerTaskSystemEnabled(final boolean isPeerTaskSystemEnabled) { + this.isPeerTaskSystemEnabled = isPeerTaskSystemEnabled; + return this; + } + public SynchronizerConfiguration build() { return new SynchronizerConfiguration( syncPivotDistance, @@ -429,7 +442,8 @@ public SynchronizerConfiguration build() { computationParallelism, maxTrailingPeers, propagationManagerGetBlockTimeoutMillis, - checkpointPostMergeEnabled); + checkpointPostMergeEnabled, + isPeerTaskSystemEnabled); } } }