diff --git a/Cargo.lock b/Cargo.lock index 75976823954a1..4b3c394329f26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6570,6 +6570,7 @@ dependencies = [ "futures-timer 3.0.2", "hyper 0.13.4", "hyper-rustls", + "lazy_static", "log", "num_cpus", "parity-scale-codec", diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index a9cd8c4deabbb..652c85dff2397 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -30,6 +30,7 @@ sp-runtime = { version = "2.0.0-rc3", path = "../../primitives/runtime" } sp-utils = { version = "2.0.0-rc3", path = "../../primitives/utils" } sc-network = { version = "0.8.0-rc3", path = "../network" } sc-keystore = { version = "2.0.0-rc3", path = "../keystore" } +lazy_static = "1.4.0" [target.'cfg(not(target_os = "unknown"))'.dependencies] hyper = "0.13.2" diff --git a/client/offchain/src/api/http.rs b/client/offchain/src/api/http.rs index 7860a95c2142a..0d71542365d51 100644 --- a/client/offchain/src/api/http.rs +++ b/client/offchain/src/api/http.rs @@ -709,12 +709,6 @@ mod tests { // server that runs in the background as well. macro_rules! build_api_server { () => {{ - // We spawn quite a bit of HTTP servers here due to how async API - // works for offchain workers, so be sure to raise the FD limit - // (particularly useful for macOS where the default soft limit may - // not be enough). - fdlimit::raise_fd_limit(); - let hyper_client = Arc::new(HyperClient::builder().build(HttpsConnector::new())); let (api, worker) = http(hyper_client.clone()); diff --git a/client/offchain/src/lib.rs b/client/offchain/src/lib.rs index 7c90065746aa3..3ee29c88a5ac4 100644 --- a/client/offchain/src/lib.rs +++ b/client/offchain/src/lib.rs @@ -44,12 +44,18 @@ use sc_network::NetworkStateInfo; use sp_core::{offchain::{self, OffchainStorage}, ExecutionContext, traits::SpawnNamed}; use sp_runtime::{generic::BlockId, traits::{self, Header}}; use futures::{prelude::*, future::ready}; +use lazy_static::lazy_static; mod api; use api::SharedClient; pub use sp_offchain::{OffchainWorkerApi, STORAGE_PREFIX}; +lazy_static! { + // Using lazy_static to have the `SharedClient` shared amongst the different OffchainWorkers. + static ref SHARED_CLIENT: SharedClient = SharedClient::new(); +} + /// An offchain workers manager. pub struct OffchainWorkers { client: Arc, @@ -62,7 +68,7 @@ pub struct OffchainWorkers { impl OffchainWorkers { /// Creates new `OffchainWorkers`. pub fn new(client: Arc, db: Storage) -> Self { - let shared_client = SharedClient::new(); + let shared_client = SHARED_CLIENT.clone(); Self { client, db,