diff --git a/cumulus/client/relay-chain-inprocess-interface/src/lib.rs b/cumulus/client/relay-chain-inprocess-interface/src/lib.rs index c796dc5f7c382..4d99e7a793975 100644 --- a/cumulus/client/relay-chain-inprocess-interface/src/lib.rs +++ b/cumulus/client/relay-chain-inprocess-interface/src/lib.rs @@ -364,7 +364,7 @@ pub fn build_inprocess_relay_chain( let relay_chain_interface = Arc::new(RelayChainInProcessInterface::new( full_node.client, full_node.backend, - full_node.sync_service, + Arc::new(full_node.sync_service), full_node.overseer_handle.clone().ok_or(RelayChainError::GenericError( "Overseer not running in full node.".to_string(), ))?, diff --git a/cumulus/client/service/src/lib.rs b/cumulus/client/service/src/lib.rs index 7f656aabca7ac..2305d578bf579 100644 --- a/cumulus/client/service/src/lib.rs +++ b/cumulus/client/service/src/lib.rs @@ -91,7 +91,7 @@ pub struct StartCollatorParams<'a, Block: BlockT, BS, Client, RCInterface, Spawn pub collator_key: CollatorPair, pub relay_chain_slot_duration: Duration, pub recovery_handle: Box, - pub sync_service: Arc>, + pub sync_service: SyncingService, } /// Parameters given to [`start_relay_chain_tasks`]. @@ -105,7 +105,7 @@ pub struct StartRelayChainTasksParams<'a, Block: BlockT, Client, RCInterface> { pub import_queue: Box>, pub relay_chain_slot_duration: Duration, pub recovery_handle: Box, - pub sync_service: Arc>, + pub sync_service: SyncingService, } /// Parameters given to [`start_full_node`]. @@ -118,7 +118,7 @@ pub struct StartFullNodeParams<'a, Block: BlockT, Client, RCInterface> { pub relay_chain_slot_duration: Duration, pub import_queue: Box>, pub recovery_handle: Box, - pub sync_service: Arc>, + pub sync_service: SyncingService, } /// Start a collator node for a parachain. @@ -275,7 +275,7 @@ where relay_chain_interface.clone(), para_id, recovery_chan_rx, - sync_service, + Arc::new(sync_service), ); task_manager @@ -439,7 +439,7 @@ pub async fn build_network<'a, Block, Client, RCInterface, IQ, Network>( TracingUnboundedSender>, TransactionsHandlerController, NetworkStarter, - Arc>, + SyncingService, )> where Block: BlockT, diff --git a/cumulus/test/service/src/lib.rs b/cumulus/test/service/src/lib.rs index 503c2f24fd549..d9b81031aeafc 100644 --- a/cumulus/test/service/src/lib.rs +++ b/cumulus/test/service/src/lib.rs @@ -267,7 +267,7 @@ async fn build_relay_chain_interface( task_manager: &mut TaskManager, ) -> RelayChainResult> { let relay_chain_full_node = match collator_options.relay_chain_mode { - cumulus_client_cli::RelayChainMode::Embedded => polkadot_test_service::new_full( + RelayChainMode::Embedded => polkadot_test_service::new_full( relay_chain_config, if let Some(ref key) = collator_key { polkadot_service::IsParachainNode::Collator(key.clone()) @@ -278,7 +278,7 @@ async fn build_relay_chain_interface( polkadot_service::CollatorOverseerGen, ) .map_err(|e| RelayChainError::Application(Box::new(e) as Box<_>))?, - cumulus_client_cli::RelayChainMode::ExternalRpc(rpc_target_urls) => + RelayChainMode::ExternalRpc(rpc_target_urls) => return build_minimal_relay_chain_node_with_rpc( relay_chain_config, task_manager, @@ -286,7 +286,7 @@ async fn build_relay_chain_interface( ) .await .map(|r| r.0), - cumulus_client_cli::RelayChainMode::LightClient => + RelayChainMode::LightClient => return build_minimal_relay_chain_node_light_client(relay_chain_config, task_manager) .await .map(|r| r.0), @@ -295,9 +295,9 @@ async fn build_relay_chain_interface( task_manager.add_child(relay_chain_full_node.task_manager); tracing::info!("Using inprocess node."); Ok(Arc::new(RelayChainInProcessInterface::new( - relay_chain_full_node.client.clone(), - relay_chain_full_node.backend.clone(), - relay_chain_full_node.sync_service.clone(), + relay_chain_full_node.client, + relay_chain_full_node.backend, + Arc::new(relay_chain_full_node.sync_service), relay_chain_full_node.overseer_handle.ok_or(RelayChainError::GenericError( "Overseer should be running in full node.".to_string(), ))?, diff --git a/polkadot/node/service/src/lib.rs b/polkadot/node/service/src/lib.rs index e1f42e1ca86a3..83723827aa42f 100644 --- a/polkadot/node/service/src/lib.rs +++ b/polkadot/node/service/src/lib.rs @@ -675,7 +675,7 @@ pub struct NewFull { pub client: Arc, pub overseer_handle: Option, pub network: Arc, - pub sync_service: Arc>, + pub sync_service: sc_network_sync::SyncingService, pub rpc_handlers: RpcHandlers, pub backend: Arc, } @@ -1166,7 +1166,7 @@ pub fn new_full< OverseerGenArgs { runtime_client, network_service: network.clone(), - sync_service: sync_service.clone(), + sync_service: Arc::new(sync_service.clone()), authority_discovery_service, collation_req_v1_receiver, collation_req_v2_receiver, diff --git a/prdoc/pr_5454.prdoc b/prdoc/pr_5454.prdoc new file mode 100644 index 0000000000000..7de975b24ed06 --- /dev/null +++ b/prdoc/pr_5454.prdoc @@ -0,0 +1,24 @@ +title: Replace `Arc>` with `SyncingService` + +doc: + - audience: Node Dev + description: | + `SyncingService` is already cloneable and doesn't need to be wrapped in `Arc` by default + +crates: + - name: sc-consensus-beefy + bump: major + - name: sc-mixnet + bump: major + - name: sc-service + bump: major + - name: sc-service-test + bump: major + - name: sc-network-test + bump: major + - name: polkadot-service + bump: major + - name: cumulus-relay-chain-inprocess-interface + bump: major + - name: cumulus-client-service + bump: major diff --git a/substrate/bin/node/cli/src/service.rs b/substrate/bin/node/cli/src/service.rs index d45713db5222a..0bc44d86d8122 100644 --- a/substrate/bin/node/cli/src/service.rs +++ b/substrate/bin/node/cli/src/service.rs @@ -384,7 +384,7 @@ pub struct NewFullBase { /// The networking service of the node. pub network: Arc, /// The syncing service of the node. - pub sync: Arc>, + pub sync: SyncingService, /// The transaction pool of the node. pub transaction_pool: Arc, /// The rpc handlers of the node. diff --git a/substrate/client/consensus/beefy/src/lib.rs b/substrate/client/consensus/beefy/src/lib.rs index 30cdd494905f2..e8150c0a129b1 100644 --- a/substrate/client/consensus/beefy/src/lib.rs +++ b/substrate/client/consensus/beefy/src/lib.rs @@ -196,7 +196,7 @@ pub struct BeefyNetworkParams { /// Network implementing gossip, requests and sync-oracle. pub network: Arc, /// Syncing service implementing a sync oracle and an event stream for peers. - pub sync: Arc, + pub sync: S, /// Handle for receiving notification events. pub notification_service: Box, /// Chain specific BEEFY gossip protocol name. See @@ -310,7 +310,7 @@ where pub fn build( self, payload_provider: P, - sync: Arc, + sync: S, comms: BeefyComms, links: BeefyVoterLinks, pending_justifications: BTreeMap, BeefyVersionedFinalityProof>, @@ -527,7 +527,7 @@ pub async fn start_beefy_gadget( R: ProvideRuntimeApi, R::Api: BeefyApi, N: GossipNetwork + NetworkRequest + Send + Sync + 'static, - S: GossipSyncing + SyncOracle + 'static, + S: GossipSyncing + SyncOracle + Clone + 'static, AuthorityId: AuthorityIdBound, { let BeefyParams { diff --git a/substrate/client/consensus/beefy/src/worker.rs b/substrate/client/consensus/beefy/src/worker.rs index 3c7f3b1b6efab..0030bccbf96fb 100644 --- a/substrate/client/consensus/beefy/src/worker.rs +++ b/substrate/client/consensus/beefy/src/worker.rs @@ -386,7 +386,7 @@ pub(crate) struct BeefyWorker, pub key_store: Arc>, pub payload_provider: P, - pub sync: Arc, + pub sync: S, pub fisherman: Arc>, // communication (created once, but returned and reused if worker is restarted/reinitialized) @@ -1079,7 +1079,7 @@ pub(crate) mod tests { Backend, MmrRootProvider, TestApi, - Arc>, + SyncingService, TestNetwork, ecdsa_crypto::AuthorityId, > { @@ -1154,7 +1154,7 @@ pub(crate) mod tests { key_store: key_store.clone(), metrics, payload_provider, - sync: Arc::new(sync), + sync, fisherman: Arc::new(Fisherman::new(backend, api, key_store)), links, comms, diff --git a/substrate/client/mixnet/src/run.rs b/substrate/client/mixnet/src/run.rs index 5ed45a0e799ed..f94f196230a6d 100644 --- a/substrate/client/mixnet/src/run.rs +++ b/substrate/client/mixnet/src/run.rs @@ -150,7 +150,7 @@ pub async fn run( config: Config, mut api_backend: ApiBackend, client: Arc, - sync: Arc, + sync: S, network: Arc, protocol_name: ProtocolName, transaction_pool: Arc

, diff --git a/substrate/client/network/test/src/lib.rs b/substrate/client/network/test/src/lib.rs index b5aeb162e9fa2..db5f2a42d1cf9 100644 --- a/substrate/client/network/test/src/lib.rs +++ b/substrate/client/network/test/src/lib.rs @@ -236,7 +236,7 @@ pub struct Peer { select_chain: Option>, backend: Option>, network: NetworkWorker::Hash>, - sync_service: Arc>, + sync_service: SyncingService, imported_blocks_stream: Pin> + Send>>, finality_notification_stream: Pin> + Send>>, listen_addr: Multiaddr, @@ -510,7 +510,7 @@ where } /// Get `SyncingService`. - pub fn sync_service(&self) -> &Arc> { + pub fn sync_service(&self) -> &SyncingService { &self.sync_service } @@ -925,7 +925,6 @@ pub trait TestNetFactory: Default + Sized + Send { ) .unwrap(); let sync_service_import_queue = Box::new(sync_service.clone()); - let sync_service = Arc::new(sync_service.clone()); for config in config.request_response_protocols { full_net_config.add_request_response_protocol(config); diff --git a/substrate/client/service/src/builder.rs b/substrate/client/service/src/builder.rs index d9a91e715fd5e..d762f7edf3a17 100644 --- a/substrate/client/service/src/builder.rs +++ b/substrate/client/service/src/builder.rs @@ -371,7 +371,7 @@ pub struct SpawnTasksParams<'a, TBl: BlockT, TCl, TExPool, TRpc, Backend> { pub tx_handler_controller: sc_network_transactions::TransactionsHandlerController<::Hash>, /// Syncing service. - pub sync_service: Arc>, + pub sync_service: SyncingService, /// Telemetry instance for this node. pub telemetry: Option<&'a mut Telemetry>, } @@ -774,7 +774,7 @@ pub fn build_network( TracingUnboundedSender>, sc_network_transactions::TransactionsHandlerController<::Hash>, NetworkStarter, - Arc>, + SyncingService, ), Error, > @@ -948,7 +948,6 @@ where Arc::clone(&peer_store_handle), )?; let sync_service_import_queue = sync_service.clone(); - let sync_service = Arc::new(sync_service); let genesis_hash = client.hash(Zero::zero()).ok().flatten().expect("Genesis block exists; qed"); let network_params = sc_network::config::Params::::Hash, TNet> { diff --git a/substrate/client/service/src/lib.rs b/substrate/client/service/src/lib.rs index ed108a3102bc4..7fe7da84ee4f1 100644 --- a/substrate/client/service/src/lib.rs +++ b/substrate/client/service/src/lib.rs @@ -171,7 +171,7 @@ async fn build_network_future< >( network: N, client: Arc, - sync_service: Arc>, + sync_service: SyncingService, announce_imported_blocks: bool, ) { let mut imported_blocks_stream = client.import_notification_stream().fuse(); @@ -237,7 +237,7 @@ pub async fn build_system_rpc_future< >( role: Role, network_service: Arc, - sync_service: Arc>, + sync_service: SyncingService, client: Arc, mut rpc_rx: TracingUnboundedReceiver>, should_have_peers: bool, @@ -267,7 +267,7 @@ pub async fn build_system_rpc_future< let _ = sender.send(network_service.local_peer_id().to_base58()); }, sc_rpc::system::Request::LocalListenAddresses(sender) => { - let peer_id = (network_service.local_peer_id()).into(); + let peer_id = network_service.local_peer_id().into(); let p2p_proto_suffix = sc_network::multiaddr::Protocol::P2p(peer_id); let addresses = network_service .listen_addresses() diff --git a/substrate/client/service/test/src/lib.rs b/substrate/client/service/test/src/lib.rs index 5b9bb537563d9..eadb09d699a1d 100644 --- a/substrate/client/service/test/src/lib.rs +++ b/substrate/client/service/test/src/lib.rs @@ -74,7 +74,7 @@ pub trait TestNetNode: Clone + Future> + Send + 'stat fn client(&self) -> Arc>; fn transaction_pool(&self) -> Arc; fn network(&self) -> Arc; - fn sync(&self) -> &Arc>; + fn sync(&self) -> &SyncingService; fn spawn_handle(&self) -> SpawnTaskHandle; } @@ -83,7 +83,7 @@ pub struct TestNetComponents { client: Arc>, transaction_pool: Arc, network: Arc, - sync: Arc>, + sync: SyncingService, } impl @@ -93,7 +93,7 @@ impl task_manager: TaskManager, client: Arc>, network: Arc, - sync: Arc>, + sync: SyncingService, transaction_pool: Arc, ) -> Self { Self { @@ -154,7 +154,7 @@ where fn network(&self) -> Arc { self.network.clone() } - fn sync(&self) -> &Arc> { + fn sync(&self) -> &SyncingService { &self.sync } fn spawn_handle(&self) -> SpawnTaskHandle {