From 9c1976346237637effc07c13f7d0403daf5e71cf Mon Sep 17 00:00:00 2001 From: Ashley Date: Fri, 10 Jan 2020 15:14:44 +0100 Subject: [PATCH] Start switching grandpa to stable futures --- bin/node-template/src/service.rs | 5 ++--- bin/node/cli/src/service.rs | 9 +++------ client/finality-grandpa/src/lib.rs | 8 ++++---- client/finality-grandpa/src/observer.rs | 12 ++++++------ utils/prometheus/README.pdf | Bin 0 -> 34842 bytes 5 files changed, 15 insertions(+), 19 deletions(-) create mode 100644 utils/prometheus/README.pdf diff --git a/bin/node-template/src/service.rs b/bin/node-template/src/service.rs index 7f6ff67d282d1..92db95b5c7d89 100644 --- a/bin/node-template/src/service.rs +++ b/bin/node-template/src/service.rs @@ -12,7 +12,6 @@ pub use sc_executor::NativeExecutor; use sp_consensus_aura::sr25519::{AuthorityPair as AuraPair}; use grandpa::{self, FinalityProofProvider as GrandpaFinalityProofProvider}; use sc_basic_authority; -use futures::{FutureExt, compat::Future01CompatExt}; // Our native executor instance. native_executor_instance!( @@ -164,7 +163,7 @@ pub fn new_full(config: Configuration { // start the full GRANDPA voter @@ -181,7 +180,7 @@ pub fn new_full(config: Configuration { grandpa::setup_disabled_grandpa( diff --git a/bin/node/cli/src/service.rs b/bin/node/cli/src/service.rs index 2f53fb7637d64..fa45ffd89bf4a 100644 --- a/bin/node/cli/src/service.rs +++ b/bin/node/cli/src/service.rs @@ -112,10 +112,7 @@ macro_rules! new_full_start { /// concrete types instead. macro_rules! new_full { ($config:expr, $with_startup_data: expr) => {{ - use futures::{ - prelude::*, - compat::Future01CompatExt - }; + use futures::prelude::*; use sc_network::Event; let ( @@ -222,7 +219,7 @@ macro_rules! new_full { service.network(), service.on_exit(), service.spawn_task_handle(), - )?.compat().map(drop)); + )?); }, (true, false) => { // start the full GRANDPA voter @@ -239,7 +236,7 @@ macro_rules! new_full { // the GRANDPA voter task is considered infallible, i.e. // if it fails we take down the service with it. service.spawn_essential_task( - grandpa::run_grandpa_voter(grandpa_config)?.compat().map(drop) + grandpa::run_grandpa_voter(grandpa_config)? ); }, (_, true) => { diff --git a/client/finality-grandpa/src/lib.rs b/client/finality-grandpa/src/lib.rs index dbecd9c9a4b7f..56d7b6498f547 100644 --- a/client/finality-grandpa/src/lib.rs +++ b/client/finality-grandpa/src/lib.rs @@ -547,7 +547,7 @@ pub struct GrandpaParams { /// block import worker that has already been instantiated with `block_import`. pub fn run_grandpa_voter( grandpa_params: GrandpaParams, -) -> sp_blockchain::Result + Send + 'static> where +) -> sp_blockchain::Result + Send + 'static> where Block::Hash: Ord, B: Backend + 'static, E: CallExecutor + Send + Sync + 'static, @@ -639,9 +639,9 @@ pub fn run_grandpa_voter( let telemetry_task = telemetry_task .then(|_| futures::future::empty::<(), ()>()); - use futures03::{FutureExt, TryFutureExt}; + use futures03::{FutureExt, TryFutureExt, future::select, compat::Future01CompatExt}; - Ok(voter_work.select(on_exit.map(Ok).compat()).select2(telemetry_task).then(|_| Ok(()))) + Ok(select(select(voter_work.compat(), telemetry_task.compat()), on_exit).map(drop)) } /// Future that powers the voter. @@ -885,7 +885,7 @@ where #[deprecated(since = "1.1.0", note = "Please switch to run_grandpa_voter.")] pub fn run_grandpa( grandpa_params: GrandpaParams, -) -> sp_blockchain::Result + Send + 'static> where +) -> sp_blockchain::Result + Send + 'static> where Block::Hash: Ord, B: Backend + 'static, E: CallExecutor + Send + Sync + 'static, diff --git a/client/finality-grandpa/src/observer.rs b/client/finality-grandpa/src/observer.rs index 3dbb2aff6a9cf..615cb72e0775f 100644 --- a/client/finality-grandpa/src/observer.rs +++ b/client/finality-grandpa/src/observer.rs @@ -156,7 +156,7 @@ pub fn run_grandpa_observer( network: N, on_exit: impl futures03::Future + Clone + Send + Unpin + 'static, executor: Sp, -) -> sp_blockchain::Result + Send + 'static> where +) -> sp_blockchain::Result + Send + 'static> where B: Backend + 'static, E: CallExecutor + Send + Sync + 'static, N: NetworkT + Send + Clone + 'static, @@ -195,9 +195,9 @@ pub fn run_grandpa_observer( warn!("GRANDPA Observer failed: {:?}", e); }); - use futures03::{FutureExt, TryFutureExt}; + use futures03::{FutureExt, future::select, compat::Future01CompatExt}; - Ok(observer_work.select(on_exit.map(Ok).compat()).map(|_| ()).map_err(|_| ())) + Ok(select(observer_work.compat(), on_exit).map(drop)) } /// Future that powers the observer. @@ -359,12 +359,12 @@ where } match self.voter_commands_rx.poll() { - Ok(Async::NotReady) => {} - Err(_) => { + Ok(Async::No{ // the `voter_commands_rx` stream should not fail. return Ok(Async::Ready(())) } - Ok(Async::Ready(None)) => { + Ok(Async::Ready(None)) => tReady) => {} + Err(_) => { // the `voter_commands_rx` stream should never conclude since it's never closed. return Ok(Async::Ready(())) } diff --git a/utils/prometheus/README.pdf b/utils/prometheus/README.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8e8adbd1f8e01f1da040653bf9e2b97ba5de72eb GIT binary patch literal 34842 zcmeFZbyyrtvp0;pdkC_)+u|PF0>K@EySqaO7TldASRlB&Yw#qvL$DyhUEf`j-15kI z&iT&uUhhBOFvE2BR@YSZ^j3HOs(Psu#U+{8m^qNx0IUFeBP%2U0VEbxOBWkc0PXz) z9TJO}lc}MLz00k2DoA*^ zNU6Aho`l4rA_8!6as?;k0j$idKqMApLjW5yD@c5ipLY=%6@Zzcjq@Xop|drBMZwf3epAJ>JE|)X5IOB5vwtX>6)2C93yZXr6zPLGy)?m8r1{=)tZ=E{|%+*n-4I zV$rZPaj^ifaUrotn_8M%xI89BEnS=yO`XK-Z5==lw{rpTfCRL+v3F8&Ff;}=!5>dV zVtHzIZJcJko6eJ}0{B=OXLW2)D7#L_+csO`?@P&YgjEI1Mga8kZgo=cOi~>5~5z)|5 zQP99?FcWZfa4pb@f&h;Irud&74;>Jg2oM+$7|@X95Kx$q(3p@9JrJZ25RkASX~6>j zIv}B-VPN4vA|WAz2x>7v;zL72frN#HfdNtbf)i<^g+PfT1wQc7AzRz+1!T|-k#+t|d^ z%-q7#%Gt%$&E3P(>vd3YNNCub@c4wpq~w&;wDg?Zy!;OZg&&Kms%vWN>KhuHy1ILM z`}#i(41OJ-n4FrPnVnnxwzj^px%GW}=jiz4^z8iN^6DC_7bFDqPqqHg>>u>P1nC6@ zdIvD@V7(xr+(8#KCJZbY8yuF161<@!HaYMW0*+{0c4a3b1-tSgu94FhBs@xvRjMPf zYLA-z_Y@2K|D@R;iv6kA90Uq9B##i*n_BGJ#`=Zozt3~rksO}{ zo|a!)SiU9lw9P+SO2{8^VLELl*k_uNajJec|1BOU3#SZ(mv!$%5A>rxME~)$%wt+3 zqKl9;G=JPjivHPKfv>JwKSoB=e2Fm7nYTByZU>BG+`bMgyzsi){@ih=q}87>+g!|W zvR8ZASYE#3hm)V`>$&_cWv-Zia3Q66e08Jl-J6G5kPZ9w<@;sLz+Y3aRpa4d|7|PS z{@KEb*xA|t)l@vUw6jKHQ3lx$fDXt;0svgxoB#lj2b|*J2IwKNh}t`ufWG%StRViZ zpu7m+(L6sI8WCd`kfjA#9srA)vJ4XVAAr`v#l^vykA=nE-JRLk&e)9E(w^nf?EY!# zxc^gx>(oee!GD~(YpsX{1?N@=ask6PSlQGCLvw>};GDsM(I-o3=At)wHnqui2gYyi;tyYerK z{#ZfAmInZ~`HyV>Y{5s3!HVbr9^bMu=vDpd2#>AxTgP8Eob9J%e;9E|8_<~bPiEXB z^M~HcnDs(T|AQB+TM47a9R#sC(#`DrO5{{utt1D<5<@MRQ^vP9<3|M7cl#ga6%(^9 zzNhV5M(um)ahYB!si}&*I=DYPjoEqGuI7I6;^CwI=JHJebaDFqfw#J&p5>G}OL?gM zWPSH^_w@Zk_d$KPa^8~%KkutE2W~e0=ZOV3?WZ>P8b>=X?)?4t>4Y`>Z@eE)x`)j? zzMlbtxBdN}_$TdO`*ZFdJbTzaoIWUe`NDU(lIQ6|U9an;s~(ls@=Uba!`;?u|4R4s zwD5t?)z6EMw$-HshJ%Sn)#ZD-bJ9pQpNk7DPHVBtX5AF5?Jfutz1+HA{m%CkYcwRV zI(x6&B+h}IM$)STwmJZe^6YN%UptD?uR=h(p zP9_zsxlD(aJkJSr(Wq4q@9m+cIp;SbKaY~?bO*P0A;z6Y+jZ$tSJJ>(j+#;$1)PBz zF)fCHBBox5a5W?+{W!MCWFv^)n{x`&vUhex6rBw)2N_v&QFrL?9b{hDsF%#YH&#-w zgx2K2DaKiE8RYBe%Jx|H%Nss}Hqd+|t<|U1RUXoHVH~uQhQLGXrHAD$pF%cRRcx`Z z|7_{|i^`D&hxrZk?CSfA26W`mE|CL= kgT;>87DYpEIw}yBxcO_1L9DQ#tGb^Z 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%0Ag|mMUMs+#gvI{A8(UA}~ey<~=zk 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