From 2fd83829de76b5144e4ad6fa84aeda412122034f Mon Sep 17 00:00:00 2001 From: Niklas Adolfsson Date: Sat, 21 May 2022 10:45:57 +0200 Subject: [PATCH] rpc servers CLI: add `--max--subscriptions--per--connection` + fix a few bugs (#11461) * cli: fix RPC CLI nits * remove needless lines * cargo fmt * Update client/service/src/lib.rs Co-authored-by: James Wilson Co-authored-by: James Wilson --- client/cli/src/commands/run_cmd.rs | 17 +++++++++++++++++ client/cli/src/config.rs | 7 ++++++- client/service/src/lib.rs | 19 +++++++++++++------ 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/client/cli/src/commands/run_cmd.rs b/client/cli/src/commands/run_cmd.rs index 6cb0de0ebd04c..b4a3885e39906 100644 --- a/client/cli/src/commands/run_cmd.rs +++ b/client/cli/src/commands/run_cmd.rs @@ -115,6 +115,11 @@ pub struct RunCmd { #[clap(long)] pub rpc_max_response_size: Option, + /// Set the the maximum concurrent subscriptions per connection. + /// Default is 1024. + #[clap(long)] + pub rpc_max_subscriptions_per_connection: Option, + /// Expose Prometheus exporter on all interfaces. /// /// Default is local. @@ -459,6 +464,18 @@ impl CliConfiguration for RunCmd { Ok(self.rpc_max_payload) } + fn rpc_max_request_size(&self) -> Result> { + Ok(self.rpc_max_request_size) + } + + fn rpc_max_response_size(&self) -> Result> { + Ok(self.rpc_max_response_size) + } + + fn rpc_max_subscriptions_per_connection(&self) -> Result> { + Ok(self.rpc_max_subscriptions_per_connection) + } + fn ws_max_out_buffer_capacity(&self) -> Result> { Ok(self.ws_max_out_buffer_capacity) } diff --git a/client/cli/src/config.rs b/client/cli/src/config.rs index e38d34b92c74d..5e91cf6c74dae 100644 --- a/client/cli/src/config.rs +++ b/client/cli/src/config.rs @@ -369,6 +369,11 @@ pub trait CliConfiguration: Sized { Ok(None) } + /// Get maximum number of subscriptions per connection. + fn rpc_max_subscriptions_per_connection(&self) -> Result> { + Ok(None) + } + /// Get maximum WS output buffer capacity. fn ws_max_out_buffer_capacity(&self) -> Result> { Ok(None) @@ -539,7 +544,7 @@ pub trait CliConfiguration: Sized { rpc_max_request_size: self.rpc_max_request_size()?, rpc_max_response_size: self.rpc_max_response_size()?, rpc_id_provider: None, - rpc_max_subs_per_conn: None, + rpc_max_subs_per_conn: self.rpc_max_subscriptions_per_connection()?, ws_max_out_buffer_capacity: self.ws_max_out_buffer_capacity()?, prometheus_config: self .prometheus_config(DCV::prometheus_listen_port(), &chain_spec)?, diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 027b704789635..24ba670cfcd65 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -480,11 +480,18 @@ where } fn legacy_cli_parsing(config: &Configuration) -> (Option, Option, Option) { - let ws_max_response_size = config.ws_max_out_buffer_capacity.map(|max| { - eprintln!("DEPRECATED: `--ws_max_out_buffer_capacity` has been removed use `rpc-max-response-size or rpc-max-request-size` instead"); - eprintln!("Setting WS `rpc-max-response-size` to `max(ws_max_out_buffer_capacity, rpc_max_response_size)`"); - std::cmp::max(max, config.rpc_max_response_size.unwrap_or(0)) - }); + let ws_max_response_size = match ( + config.ws_max_out_buffer_capacity, + config.rpc_max_response_size, + ) { + (Some(legacy_max), max) => { + eprintln!("DEPRECATED: `--ws_max_out_buffer_capacity` has been removed; use `rpc-max-response-size or rpc-max-request-size` instead"); + eprintln!("Setting WS `rpc-max-response-size` to `max(ws_max_out_buffer_capacity, rpc_max_response_size)`"); + Some(std::cmp::max(legacy_max, max.unwrap_or(0))) + }, + (None, Some(m)) => Some(m), + (None, None) => None, + }; let max_request_size = match (config.rpc_max_payload, config.rpc_max_request_size) { (Some(legacy_max), max) => { @@ -498,7 +505,7 @@ fn legacy_cli_parsing(config: &Configuration) -> (Option, Option, (None, None) => None, }; - let http_max_response_size = match (config.rpc_max_payload, config.rpc_max_request_size) { + let http_max_response_size = match (config.rpc_max_payload, config.rpc_max_response_size) { (Some(legacy_max), max) => { eprintln!("DEPRECATED: `--rpc_max_payload` has been removed use `rpc-max-response-size or rpc-max-request-size` instead"); eprintln!(