From a2338e9fdabe7711b387f903656432ef9d4056a4 Mon Sep 17 00:00:00 2001 From: kianenigma Date: Tue, 30 Mar 2021 15:01:45 +0200 Subject: [PATCH 1/4] proper executor/block type for benchmarks and try-runtime --- cli/src/command.rs | 72 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/cli/src/command.rs b/cli/src/command.rs index f0e86f70be13..d97db5fdc5a1 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -268,13 +268,27 @@ pub fn run() -> Result<()> { Some(Subcommand::Benchmark(cmd)) => { let runner = cli.create_runner(cmd)?; let chain_spec = &runner.config().chain_spec; - set_default_ss58_version(chain_spec); - - Ok(runner.sync_run(|config| { - cmd.run::(config) - .map_err(|e| Error::SubstrateCli(e)) - })?) + let spec_name = runner.config().impl_name.to_lowercase(); + + if spec_name.contains("polkadot") { + Ok(runner.sync_run(|config| { + cmd.run::(config) + .map_err(|e| Error::SubstrateCli(e)) + })?) + } else if spec_name.contains("kusama") { + Ok(runner.sync_run(|config| { + cmd.run::(config) + .map_err(|e| Error::SubstrateCli(e)) + })?) + } else if spec_name.contains("westend") { + Ok(runner.sync_run(|config| { + cmd.run::(config) + .map_err(|e| Error::SubstrateCli(e)) + })?) + } else { + panic!("can only use benchmarks with --chain value of [polkadot, kusama, westend], got {}", spec_name); + } }, Some(Subcommand::Key(cmd)) => Ok(cmd.run(&cli)?), #[cfg(feature = "try-runtime")] @@ -283,24 +297,38 @@ pub fn run() -> Result<()> { let chain_spec = &runner.config().chain_spec; set_default_ss58_version(chain_spec); - runner.async_run(|config| { - use sc_service::TaskManager; - let registry = config.prometheus_config.as_ref().map(|cfg| &cfg.registry); - let task_manager = TaskManager::new( - config.task_executor.clone(), - registry, - ).map_err(|e| Error::SubstrateService(sc_service::Error::Prometheus(e)))?; - - Ok(( - cmd.run::< + use sc_service::TaskManager; + let registry = &runner.config().prometheus_config.as_ref().map(|cfg| &cfg.registry); + let task_manager = TaskManager::new( + runner.config().task_executor.clone(), + *registry, + ).map_err(|e| Error::SubstrateService(sc_service::Error::Prometheus(e)))?; + + let spec_name = runner.config().impl_name.to_lowercase(); + if spec_name.contains("polkadot") { + runner.async_run(|config| { + Ok((cmd.run::< + service::polkadot_runtime::Block, + service::PolkadotExecutor, + >(config).map_err(Error::SubstrateCli), task_manager)) + }) + } else if spec_name.contains("kusama") { + runner.async_run(|config| { + Ok((cmd.run::< service::kusama_runtime::Block, service::KusamaExecutor, - >(config).map_err(Error::SubstrateCli), - task_manager - )) - // NOTE: we fetch only the block number from the block type, the chance of disparity - // between kusama's and polkadot's block number is small enough to overlook this. - }) + >(config).map_err(Error::SubstrateCli), task_manager)) + }) + } else if spec_name.contains("westend") { + runner.async_run(|config| { + Ok((cmd.run::< + service::westend_runtime::Block, + service::WestendExecutor, + >(config).map_err(Error::SubstrateCli), task_manager)) + }) + } else { + panic!("can only use try-runtime with --chain value of [polkadot, kusama, westend], got {}", spec_name); + } } }?; Ok(()) From e0f9b1246a94856ab0813d1e89bf9e8f5aeb72d6 Mon Sep 17 00:00:00 2001 From: kianenigma Date: Wed, 31 Mar 2021 14:49:32 +0200 Subject: [PATCH 2/4] Fix --- cli/src/command.rs | 17 ++++++++++++----- node/service/src/lib.rs | 13 +++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/cli/src/command.rs b/cli/src/command.rs index d97db5fdc5a1..97a649dd2d06 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -138,6 +138,13 @@ fn set_default_ss58_version(spec: &Box) { sp_core::crypto::set_default_ss58_version(ss58_version); } +const DEV_ONLY_ERROR_PATTERN: &'static str = + "can only use subcommand with --chain [polkadot-dev, kusama-dev, westend-dev], got "; + +fn ensure_dev(spec: &Box) -> std::result::Result<(), String> { + if spec.is_dev() { Ok(()) } else { Err(format!("{}{}", DEV_ONLY_ERROR_PATTERN, spec.id())) } +} + /// Parses polkadot specific CLI arguments and run the service. pub fn run() -> Result<()> { let cli = Cli::from_args(); @@ -304,22 +311,22 @@ pub fn run() -> Result<()> { *registry, ).map_err(|e| Error::SubstrateService(sc_service::Error::Prometheus(e)))?; - let spec_name = runner.config().impl_name.to_lowercase(); - if spec_name.contains("polkadot") { + ensure_dev(chain_spec).map_err(Error::Other)?; + if chain_spec.is_polkadot() { runner.async_run(|config| { Ok((cmd.run::< service::polkadot_runtime::Block, service::PolkadotExecutor, >(config).map_err(Error::SubstrateCli), task_manager)) }) - } else if spec_name.contains("kusama") { + } else if chain_spec.is_kusama() { runner.async_run(|config| { Ok((cmd.run::< service::kusama_runtime::Block, service::KusamaExecutor, >(config).map_err(Error::SubstrateCli), task_manager)) }) - } else if spec_name.contains("westend") { + } else if chain_spec.is_westend() { runner.async_run(|config| { Ok((cmd.run::< service::westend_runtime::Block, @@ -327,7 +334,7 @@ pub fn run() -> Result<()> { >(config).map_err(Error::SubstrateCli), task_manager)) }) } else { - panic!("can only use try-runtime with --chain value of [polkadot, kusama, westend], got {}", spec_name); + Err(format!("{}{}", DEV_ONLY_ERROR_PATTERN, chain_spec.id()).into()) } } }?; diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index b0be6abd8acc..a75e33ec2119 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -160,6 +160,12 @@ pub trait IdentifyVariant { /// Returns if this is a configuration for the `Rococo` network. fn is_rococo(&self) -> bool; + + /// Returns if this is a configuration for the `Polkadot` network. + fn is_polkadot(&self) -> bool; + + /// Returns true if this configuration is for a development network. + fn is_dev(&self) -> bool; } impl IdentifyVariant for Box { @@ -172,6 +178,13 @@ impl IdentifyVariant for Box { fn is_rococo(&self) -> bool { self.id().starts_with("rococo") || self.id().starts_with("rco") } + fn is_polkadot(&self) -> bool { + self.id().starts_with("polkadot") || self.id().starts_with("dot") + } + fn is_dev(&self) -> bool { + dbg!(self.id()); + self.id().ends_with("dev") + } } // If we're using prometheus, use a registry with a prefix of `polkadot`. From 437cf0833189511a11c67b596950ad12e42243fa Mon Sep 17 00:00:00 2001 From: kianenigma Date: Wed, 31 Mar 2021 14:51:33 +0200 Subject: [PATCH 3/4] update benches as well to latest work --- cli/src/command.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cli/src/command.rs b/cli/src/command.rs index 97a649dd2d06..99066756cb93 100644 --- a/cli/src/command.rs +++ b/cli/src/command.rs @@ -276,25 +276,25 @@ pub fn run() -> Result<()> { let runner = cli.create_runner(cmd)?; let chain_spec = &runner.config().chain_spec; set_default_ss58_version(chain_spec); - let spec_name = runner.config().impl_name.to_lowercase(); - if spec_name.contains("polkadot") { + ensure_dev(chain_spec).map_err(Error::Other)?; + if chain_spec.is_polkadot() { Ok(runner.sync_run(|config| { cmd.run::(config) .map_err(|e| Error::SubstrateCli(e)) })?) - } else if spec_name.contains("kusama") { + } else if chain_spec.is_kusama() { Ok(runner.sync_run(|config| { cmd.run::(config) .map_err(|e| Error::SubstrateCli(e)) })?) - } else if spec_name.contains("westend") { + } else if chain_spec.is_westend() { Ok(runner.sync_run(|config| { cmd.run::(config) .map_err(|e| Error::SubstrateCli(e)) })?) } else { - panic!("can only use benchmarks with --chain value of [polkadot, kusama, westend], got {}", spec_name); + Err(format!("{}{}", DEV_ONLY_ERROR_PATTERN, chain_spec.id()).into()) } }, Some(Subcommand::Key(cmd)) => Ok(cmd.run(&cli)?), From 3b351c2fdd930d8a965a675d187bf0266b183285 Mon Sep 17 00:00:00 2001 From: kianenigma Date: Wed, 31 Mar 2021 14:51:57 +0200 Subject: [PATCH 4/4] Remvoe dbg --- node/service/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index a75e33ec2119..aba1333a9f37 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -182,7 +182,6 @@ impl IdentifyVariant for Box { self.id().starts_with("polkadot") || self.id().starts_with("dot") } fn is_dev(&self) -> bool { - dbg!(self.id()); self.id().ends_with("dev") } }