Support running relay chain full node as non-collator (#1069)

* Run relay chain full node not as collator

* Clean up
This commit is contained in:
Sebastian Kunert
2022-03-04 17:02:37 +01:00
committed by GitHub
parent 17729216e9
commit e495168051
5 changed files with 35 additions and 30 deletions
+1 -1
View File
@@ -2093,7 +2093,7 @@ dependencies = [
"futures-timer", "futures-timer",
"jsonrpsee 0.9.0", "jsonrpsee 0.9.0",
"parity-scale-codec", "parity-scale-codec",
"parking_lot 0.11.2", "parking_lot 0.12.0",
"polkadot-service", "polkadot-service",
"sc-client-api", "sc-client-api",
"sc-rpc-api", "sc-rpc-api",
@@ -325,42 +325,44 @@ impl ExecuteWithClient for RelayChainInProcessInterfaceBuilder {
#[sc_tracing::logging::prefix_logs_with("Relaychain")] #[sc_tracing::logging::prefix_logs_with("Relaychain")]
fn build_polkadot_full_node( fn build_polkadot_full_node(
config: Configuration, config: Configuration,
parachain_config: &Configuration,
telemetry_worker_handle: Option<TelemetryWorkerHandle>, telemetry_worker_handle: Option<TelemetryWorkerHandle>,
) -> Result<(NewFull<polkadot_client::Client>, CollatorPair), polkadot_service::Error> { ) -> Result<(NewFull<polkadot_client::Client>, Option<CollatorPair>), polkadot_service::Error> {
let is_light = matches!(config.role, Role::Light); let is_light = matches!(config.role, Role::Light);
if is_light { if is_light {
Err(polkadot_service::Error::Sub("Light client not supported.".into())) Err(polkadot_service::Error::Sub("Light client not supported.".into()))
} else { } else {
let (is_collator, maybe_collator_key) = if parachain_config.role.is_authority() {
let collator_key = CollatorPair::generate().0; let collator_key = CollatorPair::generate().0;
(polkadot_service::IsCollator::Yes(collator_key.clone()), Some(collator_key))
} else {
(polkadot_service::IsCollator::No, None)
};
let relay_chain_full_node = polkadot_service::build_full( let relay_chain_full_node = polkadot_service::build_full(
config, config,
polkadot_service::IsCollator::Yes(collator_key.clone()), is_collator,
None, None,
true, true,
None, None,
telemetry_worker_handle, telemetry_worker_handle,
false, true,
polkadot_service::RealOverseerGen, polkadot_service::RealOverseerGen,
)?; )?;
Ok((relay_chain_full_node, collator_key)) Ok((relay_chain_full_node, maybe_collator_key))
} }
} }
/// Builds a relay chain interface by constructing a full relay chain node /// Builds a relay chain interface by constructing a full relay chain node
pub fn build_inprocess_relay_chain( pub fn build_inprocess_relay_chain(
polkadot_config: Configuration, polkadot_config: Configuration,
parachain_config: &Configuration,
telemetry_worker_handle: Option<TelemetryWorkerHandle>, telemetry_worker_handle: Option<TelemetryWorkerHandle>,
task_manager: &mut TaskManager, task_manager: &mut TaskManager,
) -> Result<(Arc<(dyn RelayChainInterface + 'static)>, CollatorPair), polkadot_service::Error> { ) -> RelayChainResult<(Arc<(dyn RelayChainInterface + 'static)>, Option<CollatorPair>)> {
let (full_node, collator_key) = let (full_node, collator_key) =
build_polkadot_full_node(polkadot_config, telemetry_worker_handle).map_err( build_polkadot_full_node(polkadot_config, parachain_config, telemetry_worker_handle)?;
|e| match e {
polkadot_service::Error::Sub(x) => x,
s => format!("{}", s).into(),
},
)?;
let sync_oracle: Box<dyn SyncOracle + Send + Sync> = Box::new(full_node.network.clone()); let sync_oracle: Box<dyn SyncOracle + Send + Sync> = Box::new(full_node.network.clone());
let sync_oracle = Arc::new(Mutex::new(sync_oracle)); let sync_oracle = Arc::new(Mutex::new(sync_oracle));
@@ -370,6 +372,7 @@ pub fn build_inprocess_relay_chain(
sync_oracle, sync_oracle,
overseer_handle: full_node.overseer_handle.clone(), overseer_handle: full_node.overseer_handle.clone(),
}; };
task_manager.add_child(full_node.task_manager); task_manager.add_child(full_node.task_manager);
Ok((relay_chain_interface_builder.build(), collator_key)) Ok((relay_chain_interface_builder.build(), collator_key))
@@ -22,7 +22,7 @@ sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "master
futures = "0.3.21" futures = "0.3.21"
futures-timer = "3.0.2" futures-timer = "3.0.2"
parity-scale-codec = "3.0.0" parity-scale-codec = "3.0.0"
parking_lot = "0.11.1" parking_lot = "0.12.0"
jsonrpsee = { version = "0.9.0", features = ["client"] } jsonrpsee = { version = "0.9.0", features = ["client"] }
tracing = "0.1.25" tracing = "0.1.25"
async-trait = "0.1.52" async-trait = "0.1.52"
@@ -166,6 +166,7 @@ where
async fn build_relay_chain_interface( async fn build_relay_chain_interface(
polkadot_config: Configuration, polkadot_config: Configuration,
parachain_config: &Configuration,
telemetry_worker_handle: Option<TelemetryWorkerHandle>, telemetry_worker_handle: Option<TelemetryWorkerHandle>,
task_manager: &mut TaskManager, task_manager: &mut TaskManager,
collator_options: CollatorOptions, collator_options: CollatorOptions,
@@ -173,14 +174,12 @@ async fn build_relay_chain_interface(
match collator_options.relay_chain_rpc_url { match collator_options.relay_chain_rpc_url {
Some(relay_chain_url) => Some(relay_chain_url) =>
Ok((Arc::new(RelayChainRPCInterface::new(relay_chain_url).await?) as Arc<_>, None)), Ok((Arc::new(RelayChainRPCInterface::new(relay_chain_url).await?) as Arc<_>, None)),
None => { None => build_inprocess_relay_chain(
let relay_chain_local = build_inprocess_relay_chain(
polkadot_config, polkadot_config,
parachain_config,
telemetry_worker_handle, telemetry_worker_handle,
task_manager, task_manager,
)?; ),
Ok((relay_chain_local.0, Some(relay_chain_local.1)))
},
} }
} }
@@ -267,6 +266,7 @@ where
let (relay_chain_interface, collator_key) = build_relay_chain_interface( let (relay_chain_interface, collator_key) = build_relay_chain_interface(
polkadot_config, polkadot_config,
&parachain_config,
telemetry_worker_handle, telemetry_worker_handle,
&mut task_manager, &mut task_manager,
collator_options.clone(), collator_options.clone(),
+7 -5
View File
@@ -287,6 +287,7 @@ where
async fn build_relay_chain_interface( async fn build_relay_chain_interface(
polkadot_config: Configuration, polkadot_config: Configuration,
parachain_config: &Configuration,
telemetry_worker_handle: Option<TelemetryWorkerHandle>, telemetry_worker_handle: Option<TelemetryWorkerHandle>,
task_manager: &mut TaskManager, task_manager: &mut TaskManager,
collator_options: CollatorOptions, collator_options: CollatorOptions,
@@ -294,14 +295,12 @@ async fn build_relay_chain_interface(
match collator_options.relay_chain_rpc_url { match collator_options.relay_chain_rpc_url {
Some(relay_chain_url) => Some(relay_chain_url) =>
Ok((Arc::new(RelayChainRPCInterface::new(relay_chain_url).await?) as Arc<_>, None)), Ok((Arc::new(RelayChainRPCInterface::new(relay_chain_url).await?) as Arc<_>, None)),
None => { None => build_inprocess_relay_chain(
let relay_chain_local = build_inprocess_relay_chain(
polkadot_config, polkadot_config,
parachain_config,
telemetry_worker_handle, telemetry_worker_handle,
task_manager, task_manager,
)?; ),
Ok((relay_chain_local.0, Some(relay_chain_local.1)))
},
} }
} }
@@ -386,6 +385,7 @@ where
let (relay_chain_interface, collator_key) = build_relay_chain_interface( let (relay_chain_interface, collator_key) = build_relay_chain_interface(
polkadot_config, polkadot_config,
&parachain_config,
telemetry_worker_handle, telemetry_worker_handle,
&mut task_manager, &mut task_manager,
collator_options.clone(), collator_options.clone(),
@@ -571,6 +571,7 @@ where
let mut task_manager = params.task_manager; let mut task_manager = params.task_manager;
let (relay_chain_interface, collator_key) = build_relay_chain_interface( let (relay_chain_interface, collator_key) = build_relay_chain_interface(
polkadot_config, polkadot_config,
&parachain_config,
telemetry_worker_handle, telemetry_worker_handle,
&mut task_manager, &mut task_manager,
collator_options.clone(), collator_options.clone(),
@@ -1372,6 +1373,7 @@ where
let (relay_chain_interface, collator_key) = build_relay_chain_interface( let (relay_chain_interface, collator_key) = build_relay_chain_interface(
polkadot_config, polkadot_config,
&parachain_config,
telemetry_worker_handle, telemetry_worker_handle,
&mut task_manager, &mut task_manager,
collator_options.clone(), collator_options.clone(),