From 58a1f9c53dbf8766bd703b4fd417a9ca1ab99df3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Silva?=
 <123550+andresilva@users.noreply.github.com>
Date: Tue, 28 Nov 2023 09:18:26 +0000
Subject: [PATCH] polkadot: disable block authoring backoff on production
 networks (#2510)

Currently the polkadot node will backoff from block authoring if
finality starts lagging. This PR disables this mechanism on production
networks (polkadot and kusama) and adds a flags to optionally force
enabling it.
---
 .../relay-chain-inprocess-interface/src/lib.rs |  1 +
 polkadot/cli/src/cli.rs                        |  4 ++++
 polkadot/cli/src/command.rs                    |  1 +
 polkadot/node/service/src/lib.rs               | 18 ++++++++++++++----
 polkadot/node/test/service/src/lib.rs          |  1 +
 .../test-parachains/adder/collator/src/main.rs |  1 +
 .../undying/collator/src/main.rs               |  1 +
 7 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/cumulus/client/relay-chain-inprocess-interface/src/lib.rs b/cumulus/client/relay-chain-inprocess-interface/src/lib.rs
index 42a56b649f0..3d297af00f2 100644
--- a/cumulus/client/relay-chain-inprocess-interface/src/lib.rs
+++ b/cumulus/client/relay-chain-inprocess-interface/src/lib.rs
@@ -286,6 +286,7 @@ fn build_polkadot_full_node(
 			grandpa_pause: None,
 			// Disable BEEFY. It should not be required by the internal relay chain node.
 			enable_beefy: false,
+			force_authoring_backoff: false,
 			jaeger_agent: None,
 			telemetry_worker_handle,
 
diff --git a/polkadot/cli/src/cli.rs b/polkadot/cli/src/cli.rs
index e20e35c9103..6a7a8b4ad7b 100644
--- a/polkadot/cli/src/cli.rs
+++ b/polkadot/cli/src/cli.rs
@@ -98,6 +98,10 @@ pub struct RunCmd {
 	#[arg(long)]
 	pub no_beefy: bool,
 
+	/// Enable the block authoring backoff that is triggered when finality is lagging.
+	#[arg(long)]
+	pub force_authoring_backoff: bool,
+
 	/// Add the destination address to the 'Jaeger' agent.
 	///
 	/// Must be valid socket address, of format `IP:Port` (commonly `127.0.0.1:6831`).
diff --git a/polkadot/cli/src/command.rs b/polkadot/cli/src/command.rs
index 2dcf5e0e8d7..c9c3c39aab1 100644
--- a/polkadot/cli/src/command.rs
+++ b/polkadot/cli/src/command.rs
@@ -259,6 +259,7 @@ where
 				is_parachain_node: service::IsParachainNode::No,
 				grandpa_pause,
 				enable_beefy,
+				force_authoring_backoff: cli.run.force_authoring_backoff,
 				jaeger_agent,
 				telemetry_worker_handle: None,
 				node_version,
diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs
index c03835b2a4b..fafdc586009 100644
--- a/polkadot/node/service/src/lib.rs
+++ b/polkadot/node/service/src/lib.rs
@@ -625,6 +625,9 @@ pub struct NewFullParams<OverseerGenerator: OverseerGen> {
 	pub is_parachain_node: IsParachainNode,
 	pub grandpa_pause: Option<(u32, u32)>,
 	pub enable_beefy: bool,
+	/// Whether to enable the block authoring backoff on production networks
+	/// where it isn't enabled by default.
+	pub force_authoring_backoff: bool,
 	pub jaeger_agent: Option<std::net::SocketAddr>,
 	pub telemetry_worker_handle: Option<TelemetryWorkerHandle>,
 	/// The version of the node. TESTING ONLY: `None` can be passed to skip the node/worker version
@@ -716,6 +719,7 @@ pub fn new_full<OverseerGenerator: OverseerGen>(
 		is_parachain_node,
 		grandpa_pause,
 		enable_beefy,
+		force_authoring_backoff,
 		jaeger_agent,
 		telemetry_worker_handle,
 		node_version,
@@ -733,15 +737,21 @@ pub fn new_full<OverseerGenerator: OverseerGen>(
 	let is_offchain_indexing_enabled = config.offchain_worker.indexing_enabled;
 	let role = config.role.clone();
 	let force_authoring = config.force_authoring;
-	let backoff_authoring_blocks = {
+	let backoff_authoring_blocks = if !force_authoring_backoff &&
+		(config.chain_spec.is_polkadot() || config.chain_spec.is_kusama())
+	{
+		// the block authoring backoff is disabled by default on production networks
+		None
+	} else {
 		let mut backoff = sc_consensus_slots::BackoffAuthoringOnFinalizedHeadLagging::default();
 
 		if config.chain_spec.is_rococo() ||
 			config.chain_spec.is_wococo() ||
-			config.chain_spec.is_versi()
+			config.chain_spec.is_versi() ||
+			config.chain_spec.is_dev()
 		{
-			// it's a testnet that's in flux, finality has stalled sometimes due
-			// to operational issues and it's annoying to slow down block
+			// on testnets that are in flux (like rococo or versi), finality has stalled
+			// sometimes due to operational issues and it's annoying to slow down block
 			// production to 1 block per hour.
 			backoff.max_interval = 10;
 		}
diff --git a/polkadot/node/test/service/src/lib.rs b/polkadot/node/test/service/src/lib.rs
index be2746daf32..a8352b60751 100644
--- a/polkadot/node/test/service/src/lib.rs
+++ b/polkadot/node/test/service/src/lib.rs
@@ -82,6 +82,7 @@ pub fn new_full(
 			is_parachain_node,
 			grandpa_pause: None,
 			enable_beefy: true,
+			force_authoring_backoff: false,
 			jaeger_agent: None,
 			telemetry_worker_handle: None,
 			node_version: None,
diff --git a/polkadot/parachain/test-parachains/adder/collator/src/main.rs b/polkadot/parachain/test-parachains/adder/collator/src/main.rs
index dfaa1973206..1558df6708d 100644
--- a/polkadot/parachain/test-parachains/adder/collator/src/main.rs
+++ b/polkadot/parachain/test-parachains/adder/collator/src/main.rs
@@ -64,6 +64,7 @@ fn main() -> Result<()> {
 						),
 						grandpa_pause: None,
 						enable_beefy: false,
+						force_authoring_backoff: false,
 						jaeger_agent: None,
 						telemetry_worker_handle: None,
 
diff --git a/polkadot/parachain/test-parachains/undying/collator/src/main.rs b/polkadot/parachain/test-parachains/undying/collator/src/main.rs
index c6b338a20dc..1db1b6f1102 100644
--- a/polkadot/parachain/test-parachains/undying/collator/src/main.rs
+++ b/polkadot/parachain/test-parachains/undying/collator/src/main.rs
@@ -84,6 +84,7 @@ fn main() -> Result<()> {
 						),
 						grandpa_pause: None,
 						enable_beefy: false,
+						force_authoring_backoff: false,
 						jaeger_agent: None,
 						telemetry_worker_handle: None,
 
-- 
GitLab