Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
7562963
Add minimal overseer gen with dummy subsystems
skunert Mar 3, 2022
ba681d2
Fix dependencies
skunert Mar 4, 2022
6375cdc
no-compile: only client transaction pool missing
skunert Mar 10, 2022
fa91617
Remove unused imports
skunert Mar 10, 2022
c9be61c
Continue to hack towards PoC
skunert Mar 15, 2022
55433bf
Continue
skunert Mar 15, 2022
2d6b45a
Make mini node compile
skunert Mar 17, 2022
7a6ca34
Compiling version with blockchainevents trait
skunert Mar 24, 2022
c0a1f19
Continue
skunert Apr 4, 2022
3288dd0
Check in lockfile
skunert Apr 4, 2022
2b2c902
Block with tokio
skunert Apr 5, 2022
a12c870
Merge branch 'master' into skunert-minimal-overseer-node
skunert Apr 11, 2022
a149420
update patches
skunert Apr 11, 2022
d86d45e
Update polkadot patches
skunert Apr 11, 2022
bcede94
Use polkadot-primitives v2
skunert Apr 25, 2022
1c461e4
Merge branch 'master' into skunert-minimal-overseer-node
skunert Apr 25, 2022
c157722
Fix build problems
skunert May 2, 2022
5940268
First working version
skunert May 9, 2022
e3e8ba8
Adjust cargo.lock
skunert May 9, 2022
b6055bd
Add integration test
skunert May 10, 2022
b19e9d8
Merge branch 'master' into skunert-minimal-overseer-node
skunert May 11, 2022
4784f5f
Make integration test work
skunert May 17, 2022
f22c70e
Allow startinc collator without relay-chain args
skunert May 18, 2022
592bfc8
Make OverseerRuntimeClient async
skunert May 18, 2022
ec0130f
Create separate integration test
skunert May 23, 2022
a5e63b0
Remove unused ChainSelection code
skunert May 23, 2022
30e0273
Remove unused parameters on new-mini
skunert May 25, 2022
0638e66
Connect collator node in test to relay chain nodes
skunert May 25, 2022
c7c5fd4
Make BlockChainRPCClient obsolete
skunert May 25, 2022
b08c1c9
Clean up
skunert May 27, 2022
454348c
Merge branch 'master' into skunert-minimal-overseer-node
skunert May 30, 2022
b37bda5
Clean up
skunert Jun 1, 2022
fd2e80a
Reimplement blockchain-rpc-events
skunert Jun 20, 2022
12bb197
Revert "Allow startinc collator without relay-chain args"
skunert Jun 20, 2022
a69993f
Merge branch 'master' into collator-rpc-poc
skunert Jun 20, 2022
e92c7dd
Add `strict_record_validation` to AuthorityDiscovery
skunert Jun 21, 2022
8aeb05c
Move network to cumulus
skunert Jun 22, 2022
0b4aa99
Remove BlockchainRPCEvents
skunert Jun 23, 2022
300eec0
Remove `BlockIdTo` and `BlockchainEvents`
skunert Jun 23, 2022
d5b1e4d
Make AuthorityDiscovery async
skunert Jun 23, 2022
5a4a18e
Use hash in OverseerRuntime
skunert Jun 28, 2022
c07be4d
Merge branch 'master' into collator-rpc-poc
skunert Jul 11, 2022
597c3f4
Adjust naming of runtime client trait
skunert Jul 14, 2022
e4e98e3
Merge branch 'master' into collator-rpc-poc
skunert Jul 26, 2022
86fc321
Implement more rpc-client methods
skunert Jul 29, 2022
18eb21e
Improve error handling for `ApiError`
skunert Jul 29, 2022
8712354
Extract authority-discovery creationand cleanup
skunert Jul 29, 2022
a46d22f
Merge branch 'master' into collator-rpc-poc
skunert Aug 3, 2022
af245af
RPC -> Rpc
skunert Aug 3, 2022
7cc26e5
Extract bitswap
skunert Aug 9, 2022
122d449
Merge branch 'master' into collator-rpc-poc
skunert Aug 12, 2022
d8ac26f
Adjust to changes on master
skunert Aug 12, 2022
aae466f
Implement `hash` method
skunert Aug 12, 2022
42d9223
Introduce DummyChainSync, remove ProofProvider and BlockBackend
skunert Aug 12, 2022
3f4adaa
Remove `HeaderMetadata` from blockchain-rpc-client
skunert Aug 12, 2022
f5f7094
Make ChainSync work
skunert Aug 17, 2022
67a2202
Implement NetworkHeaderBackend
skunert Aug 18, 2022
ab19e8a
Cleanup
skunert Aug 22, 2022
dda50d6
Merge branch 'master' into collator-rpc-poc
skunert Aug 22, 2022
41335cc
Adjustments after master merge
skunert Aug 24, 2022
45442fd
Remove ImportQueue from network parameters
skunert Aug 24, 2022
76f2079
Remove cargo patches
skunert Aug 26, 2022
162576e
Eliminate warnings
skunert Aug 26, 2022
df9875c
Revert to HeaderBackend
skunert Aug 30, 2022
28e1867
Add zombienet test
skunert Aug 30, 2022
a6c3ccd
Implement `status()` method
skunert Aug 30, 2022
54c3e84
Add more comments, improve readability
skunert Aug 30, 2022
80cc98a
Remove patches from Cargo.toml
skunert Aug 31, 2022
abb12e3
Remove integration test in favor of zombienet
skunert Aug 31, 2022
92f5dcf
Remove unused dependencies, rename minimal node crate
skunert Aug 31, 2022
96c9c6d
Merge branch 'master' into collator-rpc-poc
skunert Aug 31, 2022
74b30bc
Adjust to latest master changes
skunert Aug 31, 2022
5956e72
fmt
skunert Aug 31, 2022
f4b8949
Execute zombienet test on gitlab ci
skunert Sep 1, 2022
f472743
Reuse network metrics
skunert Sep 1, 2022
8144680
Chainsync metrics
skunert Sep 1, 2022
217f05d
fmt
skunert Sep 1, 2022
6ba48c1
Feed RPC node as boot node to the relay chain minimal node
skunert Sep 2, 2022
1109f26
Merge branch 'master' into collator-rpc-poc
skunert Sep 2, 2022
e822b46
fmt
skunert Sep 2, 2022
ca0abb2
Add bootnodes to zombienet collators
skunert Sep 2, 2022
cf4763e
Allow specification of relay chain args
skunert Sep 2, 2022
3c06ece
Merge branch 'master' into collator-rpc-poc
skunert Sep 2, 2022
ee7e84b
Merge branch 'master' into collator-rpc-poc
skunert Sep 14, 2022
10e602c
Merge branch 'master' into collator-rpc-poc
skunert Sep 15, 2022
a3aa0ea
Apply review suggestions
skunert Sep 15, 2022
ba5ef94
Remove unnecessary casts
skunert Sep 15, 2022
976c529
Enable PoV recovery for rpc full nodes
skunert Sep 16, 2022
b1cd618
Merge branch 'master' into collator-rpc-poc
skunert Sep 16, 2022
8dc7ddc
Revert unwanted changes
skunert Sep 19, 2022
8301c28
Make overseerHandle non-optional
skunert Sep 19, 2022
760a127
Add availability-store subsystem
skunert Sep 19, 2022
49c5652
Merge branch 'master' into pov-recovery-rpc
skunert Sep 20, 2022
659dd58
Add AuxStore and ChainApiSubsystem
skunert Sep 20, 2022
1a00dce
Add availability distribution subsystem
skunert Sep 20, 2022
1a56dd5
Improve pov-recovery logging and add RPC nodes to tests
skunert Sep 21, 2022
33a059a
fmt
skunert Sep 21, 2022
9ef29ed
Merge branch 'master' into collator-rpc-poc
skunert Sep 21, 2022
a9610d0
Make availability config const
skunert Sep 22, 2022
95377d2
Merge branch 'master' into collator-rpc-poc
skunert Sep 22, 2022
00c745a
lock
skunert Sep 22, 2022
5de1bf3
Enable debug logs for pov-recovery in zombienet
skunert Sep 22, 2022
7d24629
Add log filters to test binary
skunert Sep 22, 2022
3c591ae
Allow wss
skunert Sep 23, 2022
3e944b3
Merge branch 'master' into collator-rpc-poc
skunert Sep 23, 2022
694db8d
Address review comments
skunert Sep 26, 2022
2bd96d9
Merge branch 'master' into collator-rpc-poc
skunert Sep 26, 2022
ac4ede3
Apply reviewer comments
skunert Sep 30, 2022
09272e8
Merge branch 'master' into collator-rpc-poc
skunert Sep 30, 2022
4bfdc6f
Adjust to master changes
skunert Sep 30, 2022
603ddcb
Apply reviewer suggestions
skunert Oct 4, 2022
7f5ccc5
Bump polkadot
skunert Oct 4, 2022
11a23e2
Add builder method for minimal node
skunert Oct 4, 2022
c67379b
Merge branch 'master' into collator-rpc-poc
skunert Oct 4, 2022
50c7cc1
Bump substrate and polkadot
skunert Oct 4, 2022
ea09b5b
Clean up overseer building
skunert Oct 4, 2022
e58174e
Add bootnode to two in pov_recovery test
skunert Oct 4, 2022
6115bae
Fix missing quote in pov recovery zombienet test
skunert Oct 4, 2022
d5f36d3
Improve zombienet pov test
skunert Oct 5, 2022
5f7347d
Merge branch 'master' into collator-rpc-poc
skunert Oct 6, 2022
393eb10
More debug logs for pov-recovery
skunert Oct 6, 2022
1027520
Remove reserved nodes like on original test
skunert Oct 7, 2022
c5003b5
Revert zombienet test to master
skunert Oct 7, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add availability distribution subsystem
  • Loading branch information
skunert committed Sep 21, 2022
commit 1a00dce50ef398eaffa89e59006e81c0f737597a
2 changes: 1 addition & 1 deletion client/relay-chain-inprocess-interface/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ where
let block_id = BlockId::Hash(hash);

if backend.blockchain().status(block_id)? == BlockStatus::InChain {
return Ok(BlockCheckStatus::InChain);
return Ok(BlockCheckStatus::InChain)
}

let listener = client.import_notification_stream();
Expand Down
4 changes: 2 additions & 2 deletions client/relay-chain-minimal-node/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@ polkadot-node-subsystem-util = { git = "https://github.com/paritytech/polkadot",
polkadot-node-network-protocol = { git = "https://github.com/paritytech/polkadot", branch = "master" }
polkadot-network-bridge = { git = "https://github.com/paritytech/polkadot", branch = "master" }
polkadot-node-core-av-store = { git = "https://github.com/paritytech/polkadot", branch = "master" }
polkadot-availability-distribution = { git = "https://github.com/paritytech/polkadot", branch = "master" }

Comment thread
skunert marked this conversation as resolved.

# substrate deps
sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-client-db = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-network-sync = { git = "https://github.com/paritytech/substrate", branch = "master" }
sc-network-common = { git = "https://github.com/paritytech/substrate", branch = "master" }
Expand All @@ -34,7 +35,6 @@ sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "mas
sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" }
sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "master" }

# cumulus deps
cumulus-relay-chain-interface = { path = "../relay-chain-interface" }
Expand Down
12 changes: 7 additions & 5 deletions client/relay-chain-minimal-node/src/blockchain_rpc_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ impl BlockChainRpcClient {
}
}

// Implementation required by Availability-Distribution subsystem
// but never called in our case.
impl AuxStore for BlockChainRpcClient {
fn insert_aux<
'a,
Expand All @@ -64,14 +66,14 @@ impl AuxStore for BlockChainRpcClient {
D: IntoIterator<Item = &'a &'b [u8]>,
>(
&self,
insert: I,
delete: D,
_insert: I,
_delete: D,
) -> sp_blockchain::Result<()> {
todo!()
unimplemented!()
Comment thread
skunert marked this conversation as resolved.
Outdated
}

fn get_aux(&self, key: &[u8]) -> sp_blockchain::Result<Option<Vec<u8>>> {
todo!()
fn get_aux(&self, _key: &[u8]) -> sp_blockchain::Result<Option<Vec<u8>>> {
unimplemented!()
}
}

Expand Down
33 changes: 27 additions & 6 deletions client/relay-chain-minimal-node/src/collator_overseer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,17 @@
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.

use lru::LruCache;
use polkadot_availability_distribution::{
AvailabilityDistributionSubsystem, IncomingRequestReceivers,
};
use polkadot_node_core_av_store::Config;
use polkadot_node_network_protocol::{
peer_set::PeerSetProtocolNames,
request_response::{
v1::{AvailableDataFetchingRequest, CollationFetchingRequest},
v1::{
AvailableDataFetchingRequest, ChunkFetchingRequest, CollationFetchingRequest,
PoVFetchingRequest,
},
IncomingRequestReceiver, ReqProtocolNames,
},
};
Expand All @@ -38,6 +44,7 @@ use polkadot_service::{
Error, OverseerConnector,
};
use sc_authority_discovery::Service as AuthorityDiscoveryService;
use sc_keystore::LocalKeystore;
use sc_network::NetworkStateInfo;

use std::sync::Arc;
Expand All @@ -52,36 +59,42 @@ use sp_runtime::traits::Block as BlockT;

/// Arguments passed for overseer construction.
pub(crate) struct CollatorOverseerGenArgs<'a> {
/// Set of initial relay chain leaves to track.
pub leaves: Vec<BlockInfo>,
/// Runtime client generic, providing the `ProvieRuntimeApi` trait besides others.
pub runtime_client: Arc<BlockChainRpcClient>,
/// Underlying network service implementation.
pub network_service: Arc<sc_network::NetworkService<Block, PHash>>,
/// Underlying authority discovery service.
pub authority_discovery_service: AuthorityDiscoveryService,
// Receiver for collation request protocol
pub collation_req_receiver: IncomingRequestReceiver<CollationFetchingRequest>,
// Receiver for PoV request protocol
pub pov_req_receiver: IncomingRequestReceiver<PoVFetchingRequest>,
// Receiver for chunk request protocol
pub chunk_req_receiver: IncomingRequestReceiver<ChunkFetchingRequest>,
// Receiver for availability request protocol
pub available_data_req_receiver: IncomingRequestReceiver<AvailableDataFetchingRequest>,
/// Prometheus registry, commonly used for production systems, less so for test.
pub registry: Option<&'a Registry>,
/// Task spawner to be used throughout the overseer and the APIs it provides.
pub spawner: sc_service::SpawnTaskHandle,
/// Determines the behavior of the collator.
pub collator_pair: CollatorPair,
/// Request response protocols
pub req_protocol_names: ReqProtocolNames,
pub peer_set_protocol_names: PeerSetProtocolNames,
Comment thread
skunert marked this conversation as resolved.
/// Config for the availability store
pub availability_config: Config,
/// The underlying key value store for the parachains.
pub parachains_db: Arc<dyn polkadot_node_subsystem_util::database::Database>,
}

pub(crate) struct CollatorOverseerGen;
Comment thread
skunert marked this conversation as resolved.
Outdated

impl CollatorOverseerGen {
pub(crate) fn generate<'a>(
&self,
connector: OverseerConnector,
CollatorOverseerGenArgs {
leaves,
runtime_client,
network_service,
authority_discovery_service,
Expand All @@ -94,6 +107,8 @@ impl CollatorOverseerGen {
req_protocol_names,
peer_set_protocol_names,
parachains_db,
pov_req_receiver,
chunk_req_receiver,
}: CollatorOverseerGenArgs<'a>,
) -> Result<
(
Expand All @@ -102,12 +117,17 @@ impl CollatorOverseerGen {
),
Error,
> {
let leaves = Vec::new();
let metrics = <OverseerMetrics as MetricsTrait>::register(registry)?;

let keystore = Arc::new(LocalKeystore::in_memory());
let spawner = SpawnGlue(spawner);
let network_bridge_metrics: NetworkBridgeMetrics = Metrics::register(registry)?;
let builder = Overseer::builder()
.availability_distribution(DummySubsystem)
.availability_distribution(AvailabilityDistributionSubsystem::new(
keystore.clone(),
IncomingRequestReceivers { pov_req_receiver, chunk_req_receiver },
Metrics::register(registry)?,
))
.availability_recovery(AvailabilityRecoverySubsystem::with_chunks_only(
available_data_req_receiver,
Metrics::register(registry)?,
Expand Down Expand Up @@ -183,6 +203,7 @@ pub(crate) fn spawn_overseer(
relay_chain_rpc_client: Arc<BlockChainRpcClient>,
) -> Result<polkadot_overseer::Handle, polkadot_service::Error> {
let overseer_gen = CollatorOverseerGen;

let (overseer, overseer_handle) = overseer_gen
.generate(OverseerConnector::default(), overseer_args)
.map_err(|e| {
Expand Down
45 changes: 29 additions & 16 deletions client/relay-chain-minimal-node/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,14 @@ use collator_overseer::{CollatorOverseerGenArgs, NewMinimalNode};

use cumulus_relay_chain_interface::RelayChainError;
use polkadot_network_bridge::{peer_sets_info, IsAuthority};
use polkadot_node_core_av_store::Config as AvailabilityConfig;
use polkadot_node_network_protocol::{
peer_set::PeerSetProtocolNames,
request_response::{IncomingRequest, ReqProtocolNames},
request_response::{self, IncomingRequest, ReqProtocolNames},
};
use polkadot_node_subsystem_util::metrics::prometheus::Registry;
use polkadot_primitives::v2::CollatorPair;

use sc_authority_discovery::Service as AuthorityDiscoveryService;
use sc_client_db::DatabaseSource;
use sc_network::{Event, NetworkService};
use sc_network_common::service::NetworkEventStream;
use std::sync::Arc;
Expand Down Expand Up @@ -120,7 +118,6 @@ pub async fn new_minimal_relay_chain(

let peer_set_protocol_names =
PeerSetProtocolNames::new(genesis_hash, config.chain_spec.fork_id());

{
Comment thread
skunert marked this conversation as resolved.
Outdated
let is_authority = if role.is_authority() { IsAuthority::Yes } else { IsAuthority::No };
config
Expand All @@ -130,13 +127,8 @@ pub async fn new_minimal_relay_chain(
}

let request_protocol_names = ReqProtocolNames::new(genesis_hash, config.chain_spec.fork_id());
let (collation_req_receiver, cfg) =
IncomingRequest::get_config_receiver(&request_protocol_names);
config.network.request_response_protocols.push(cfg);
let (available_data_req_receiver, cfg) =
IncomingRequest::get_config_receiver(&request_protocol_names);
config.network.request_response_protocols.push(cfg);

let (collation_req_receiver, available_data_req_receiver, pov_req_receiver, chunk_req_receiver) =
build_request_response_protocol_receivers(&request_protocol_names, &mut config);
let (network, network_starter) =
network::build_collator_network(network::BuildCollatorNetworkParams {
config: &config,
Expand All @@ -145,8 +137,6 @@ pub async fn new_minimal_relay_chain(
genesis_hash,
})?;

let active_leaves = Vec::new();

let authority_discovery_service = build_authority_discovery_service(
&task_manager,
relay_chain_rpc_client.clone(),
Expand All @@ -156,9 +146,8 @@ pub async fn new_minimal_relay_chain(
);

let parachains_db = open_database(&config.database)?;
let availability_config = AvailabilityConfig { col_data: 0, col_meta: 1 };

let overseer_args = CollatorOverseerGenArgs {
leaves: active_leaves,
runtime_client: relay_chain_rpc_client.clone(),
network_service: network.clone(),
authority_discovery_service,
Expand All @@ -170,7 +159,9 @@ pub async fn new_minimal_relay_chain(
req_protocol_names: request_protocol_names,
peer_set_protocol_names,
parachains_db,
availability_config,
availability_config: polkadot_service::create_availability_config(),
pov_req_receiver,
chunk_req_receiver,
};

let overseer_handle = collator_overseer::spawn_overseer(
Expand All @@ -183,3 +174,25 @@ pub async fn new_minimal_relay_chain(

Ok(NewMinimalNode { task_manager, overseer_handle, network })
}

fn build_request_response_protocol_receivers(
request_protocol_names: &ReqProtocolNames,
config: &mut Configuration,
) -> (
request_response::IncomingRequestReceiver<request_response::v1::CollationFetchingRequest>,
request_response::IncomingRequestReceiver<request_response::v1::AvailableDataFetchingRequest>,
request_response::IncomingRequestReceiver<request_response::v1::PoVFetchingRequest>,
request_response::IncomingRequestReceiver<request_response::v1::ChunkFetchingRequest>,
) {
let (collation_req_receiver, cfg) =
IncomingRequest::get_config_receiver(request_protocol_names);
config.network.request_response_protocols.push(cfg);
let (available_data_req_receiver, cfg) =
IncomingRequest::get_config_receiver(request_protocol_names);
config.network.request_response_protocols.push(cfg);
let (pov_req_receiver, cfg) = IncomingRequest::get_config_receiver(request_protocol_names);
config.network.request_response_protocols.push(cfg);
let (chunk_req_receiver, cfg) = IncomingRequest::get_config_receiver(request_protocol_names);
config.network.request_response_protocols.push(cfg);
(collation_req_receiver, available_data_req_receiver, pov_req_receiver, chunk_req_receiver)
}
2 changes: 1 addition & 1 deletion client/relay-chain-rpc-interface/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ impl RelayChainInterface for RelayChainRpcInterface {
let mut head_stream = self.rpc_client.get_imported_heads_stream().await?;

if self.rpc_client.chain_get_header(Some(wait_for_hash)).await?.is_some() {
return Ok(());
return Ok(())
}

let mut timeout = futures_timer::Delay::new(Duration::from_secs(TIMEOUT_IN_SECONDS)).fuse();
Expand Down
2 changes: 1 addition & 1 deletion test/service/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ async fn build_relay_chain_interface(
.await?;
task_manager.add_child(collator_node.task_manager);
tracing::info!("Using relay chain minimal node.");
return Ok(Arc::new(RelayChainRpcInterface::new(client, collator_node.overseer_handle)));
return Ok(Arc::new(RelayChainRpcInterface::new(client, collator_node.overseer_handle)))
}

let relay_chain_full_node = polkadot_test_service::new_full(
Expand Down