From e33a8dde4ade2950d27ebde30de95ca638c06577 Mon Sep 17 00:00:00 2001 From: Robert Habermeier <rphmeier@gmail.com> Date: Sat, 27 Oct 2018 15:43:03 +0200 Subject: [PATCH] compiles --- .../core/finality-grandpa/src/authorities.rs | 31 ++++++++++++------- substrate/core/finality-grandpa/src/lib.rs | 14 ++++----- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/substrate/core/finality-grandpa/src/authorities.rs b/substrate/core/finality-grandpa/src/authorities.rs index 37712a7615f..cbe53ceb3db 100644 --- a/substrate/core/finality-grandpa/src/authorities.rs +++ b/substrate/core/finality-grandpa/src/authorities.rs @@ -20,6 +20,7 @@ use parking_lot::RwLock; use substrate_primitives::AuthorityId; use std::cmp::Ord; +use std::fmt::Debug; use std::ops::Add; use std::sync::Arc; @@ -54,14 +55,19 @@ impl<H, N> SharedAuthoritySet<H, N> { } } -impl<H: Eq, N: Add<Output=N> + Ord + Clone> SharedAuthoritySet<H, N> { +impl<H: Eq, N> SharedAuthoritySet<H, N> + where N: Add<Output=N> + Ord + Clone + Debug +{ /// Note an upcoming pending transition. pub(crate) fn add_pending_change(&self, pending: PendingChange<H, N>) { // ordered first by effective number and then by signal-block number. let mut inner = self.inner.write(); - let key = (pending.effective_number(), pending.canon_height); + let key = (pending.effective_number(), pending.canon_height.clone()); let idx = inner.pending_changes - .binary_search_by_key(&key, |change| (change.effective_number(), change.canon_height)) + .binary_search_by_key(&key, |change| ( + change.effective_number(), + change.canon_height.clone(), + )) .unwrap_or_else(|i| i); inner.pending_changes.insert(idx, pending); @@ -98,11 +104,6 @@ pub(crate) struct AuthoritySet<H, N> { } impl<H, N> AuthoritySet<H, N> { - /// Get the earliest limit-block number, if any. - pub(crate) fn current_limit(&self) -> Option<N> { - self.pending_changes.get(0).map(|change| change.effective_number().clone()) - } - /// Get the set identifier. pub(crate) fn set_id(&self) -> u64 { self.set_id @@ -114,12 +115,20 @@ impl<H, N> AuthoritySet<H, N> { } } -impl<H: Eq, N: Ord + Debug> AuthoritySet<H, N> { +impl<H: Eq, N> AuthoritySet<H, N> + where N: Add<Output=N> + Ord + Clone + Debug, +{ + /// Get the earliest limit-block number, if any. + pub(crate) fn current_limit(&self) -> Option<N> { + self.pending_changes.get(0).map(|change| change.effective_number().clone()) + } + /// Apply or prune any pending transitions. Provide a closure that can be used to check for the /// finalized block with given number. /// /// Returns true when the set's representation has changed. - pub(crate) fn apply_changes<F, E>(&mut self, just_finalized: N, canonical: F) -> Result<bool, E> + pub(crate) fn apply_changes<F, E>(&mut self, just_finalized: N, mut canonical: F) + -> Result<bool, E> where F: FnMut(N) -> Result<H, E> { let mut changed = false; @@ -132,7 +141,7 @@ impl<H: Eq, N: Ord + Debug> AuthoritySet<H, N> { // check if the block that signalled the change is canonical in // our chain. - if canonical(change.canon_height)? == change.canon_hash { + if canonical(change.canon_height.clone())? == change.canon_hash { // apply this change: make the set canonical info!(target: "finality", "Applying authority set change scheduled at block #{:?}", change.canon_height); diff --git a/substrate/core/finality-grandpa/src/lib.rs b/substrate/core/finality-grandpa/src/lib.rs index 2e907bf9fa0..7c12be4a8a8 100644 --- a/substrate/core/finality-grandpa/src/lib.rs +++ b/substrate/core/finality-grandpa/src/lib.rs @@ -108,7 +108,7 @@ pub enum Error { /// A blockchain error. Blockchain(String), /// Could not complete a round on disk. - CouldNotCompleteRound(ClientError), + Client(ClientError), /// A timer failed to fire. Timer(::tokio::timer::Error), } @@ -520,7 +520,7 @@ impl From<Error> for ExitOrError { impl From<ClientError> for ExitOrError { fn from(e: ClientError) -> Self { - ExitOrError::Error(Error::from(e)) + ExitOrError::Error(Error::Client(e)) } } @@ -578,7 +578,7 @@ impl<B, E, Block: BlockT, N> voter::Environment<Block::Hash, NumberFor<Block>> f self.config.local_key.clone(), self.config.genesis_voters.clone(), self.network.clone(), - ).sink_map_err(Into::into); + ); // schedule incoming messages from the network to be held until // corresponding blocks are imported. @@ -595,12 +595,12 @@ impl<B, E, Block: BlockT, N> voter::Environment<Block::Hash, NumberFor<Block>> f let outgoing = Box::new(ClearOnDrop { round, network: self.network.clone(), - inner: outgoing, + inner: outgoing.sink_map_err(Into::into), }); voter::RoundData { - prevote_timer: Box::new(prevote_timer.map_err(Error::Timer)), - precommit_timer: Box::new(precommit_timer.map_err(Error::Timer)), + prevote_timer: Box::new(prevote_timer.map_err(|e| Error::Timer(e).into())), + precommit_timer: Box::new(precommit_timer.map_err(|e| Error::Timer(e).into())), voters: self.voters.clone(), incoming, outgoing, @@ -613,7 +613,7 @@ impl<B, E, Block: BlockT, N> voter::Environment<Block::Hash, NumberFor<Block>> f .insert_aux(&[(LAST_COMPLETED_KEY, &encoded_state[..])], &[]) { warn!(target: "afg", "Shutting down voter due to error bookkeeping last completed round in DB: {:?}", e); - Err(Error::CouldNotCompleteRound(e).into()) + Err(Error::Client(e).into()) } else { Ok(()) } -- GitLab