From 05a5047e40b495e24c466a34e11a1e37f75748df Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 1 Apr 2021 23:45:00 +0200 Subject: [PATCH] remove training wheels (#2800) --- polkadot/node/service/src/grandpa_support.rs | 70 +++++--------------- polkadot/node/service/src/lib.rs | 2 +- 2 files changed, 17 insertions(+), 55 deletions(-) diff --git a/polkadot/node/service/src/grandpa_support.rs b/polkadot/node/service/src/grandpa_support.rs index 5e9a40e006..2715723688 100644 --- a/polkadot/node/service/src/grandpa_support.rs +++ b/polkadot/node/service/src/grandpa_support.rs @@ -26,7 +26,7 @@ use sp_runtime::traits::Header as _; #[cfg(feature = "real-overseer")] use { - polkadot_primitives::v1::{Block as PolkadotBlock, Header as PolkadotHeader, BlockNumber}, + polkadot_primitives::v1::{Block as PolkadotBlock, Header as PolkadotHeader}, polkadot_subsystem::messages::ApprovalVotingMessage, prometheus_endpoint::{self, Registry}, polkadot_overseer::OverseerHandler, @@ -41,18 +41,18 @@ use { /// approval checking would indicate. #[cfg(feature = "real-overseer")] #[derive(Clone)] -pub(crate) struct ApprovalCheckingDiagnostic { +pub(crate) struct ApprovalCheckingVotingRule { checking_lag: Option>, overseer: OverseerHandler, } #[cfg(feature = "real-overseer")] -impl ApprovalCheckingDiagnostic { +impl ApprovalCheckingVotingRule { /// Create a new approval checking diagnostic voting rule. pub fn new(overseer: OverseerHandler, registry: Option<&Registry>) -> Result { - Ok(ApprovalCheckingDiagnostic { + Ok(ApprovalCheckingVotingRule { checking_lag: if let Some(registry) = registry { Some(prometheus_endpoint::register( prometheus_endpoint::Gauge::with_opts( @@ -72,61 +72,16 @@ impl ApprovalCheckingDiagnostic { } #[cfg(feature = "real-overseer")] -impl grandpa::VotingRule for ApprovalCheckingDiagnostic +impl grandpa::VotingRule for ApprovalCheckingVotingRule where B: sp_blockchain::HeaderBackend { fn restrict_vote( &self, - backend: Arc, + _backend: Arc, base: &PolkadotHeader, best_target: &PolkadotHeader, current_target: &PolkadotHeader, ) -> grandpa::VotingRuleResult { - // always wait 50 blocks behind the head to finalize. - const DIAGNOSTIC_GRANDPA_DELAY: BlockNumber = 50; - - let aux = || { - let find_target = |target_number: BlockNumber, current_header: &PolkadotHeader| { - let mut target_hash = current_header.hash(); - let mut target_header = current_header.clone(); - - loop { - if *target_header.number() < target_number { - unreachable!( - "we are traversing backwards from a known block; \ - blocks are stored contiguously; \ - qed" - ); - } - - if *target_header.number() == target_number { - return Some((target_hash, target_number)); - } - - target_hash = *target_header.parent_hash(); - target_header = backend.header(BlockId::Hash(target_hash)).ok()? - .expect("Header known to exist due to the existence of one of its descendents; qed"); - } - }; - - // delay blocks behind the head, but make sure we're not ahead of the current - // target. - let target_number = std::cmp::min( - best_target.number().saturating_sub(DIAGNOSTIC_GRANDPA_DELAY), - current_target.number().clone(), - ); - - // don't go below base - let target_number = std::cmp::max( - target_number, - base.number().clone(), - ); - - find_target(target_number, current_target) - }; - - let actual_vote_target = aux(); - // Query approval checking and issue metrics. let mut overseer = self.overseer.clone(); let checking_lag = self.checking_lag.clone(); @@ -134,6 +89,9 @@ impl grandpa::VotingRule for ApprovalCheckingDiagnostic let best_hash = best_target.hash(); let best_number = best_target.number.clone(); + let current_hash = current_target.hash(); + let current_number = current_target.number.clone(); + let base_number = base.number; Box::pin(async move { @@ -157,14 +115,18 @@ impl grandpa::VotingRule for ApprovalCheckingDiagnostic checking_lag.set(approval_checking_subsystem_lag as _); } - tracing::debug!( + tracing::trace!( target: "parachain::approval-voting", "GRANDPA: voting on {:?}. Approval-checking lag behind best is {}", - actual_vote_target, + approval_checking_subsystem_vote, approval_checking_subsystem_lag, ); - actual_vote_target + if approval_checking_subsystem_vote.map_or(false, |v| current_number < v.1) { + Some((current_hash, current_number)) + } else { + approval_checking_subsystem_vote + } }) } } diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs index 00bf8a10f0..0f90949264 100644 --- a/polkadot/node/service/src/lib.rs +++ b/polkadot/node/service/src/lib.rs @@ -1062,7 +1062,7 @@ pub fn new_full( #[cfg(feature = "real-overseer")] let builder = if let Some(ref overseer) = overseer_handler { - builder.add(grandpa_support::ApprovalCheckingDiagnostic::new( + builder.add(grandpa_support::ApprovalCheckingVotingRule::new( overseer.clone(), prometheus_registry.as_ref(), )?)