Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
more migration bits
Browse files Browse the repository at this point in the history
  • Loading branch information
drahnr committed Apr 20, 2022
1 parent 462a93e commit a62b113
Show file tree
Hide file tree
Showing 12 changed files with 205 additions and 182 deletions.
2 changes: 1 addition & 1 deletion node/core/chain-selection/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ async fn run<Context, B>(
match res {
Err(e) => {
e.trace();
// All errors right now are considered fatal:
// All errors are considered fatal right now:
break
},
Ok(()) => {
Expand Down
25 changes: 6 additions & 19 deletions node/overseer/examples/minimal-example.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ use polkadot_overseer::{
self as overseer,
dummy::dummy_overseer_builder,
gen::{FromOverseer, SpawnedSubsystem},
AllMessages, HeadSupportsParachains, OverseerSignal, SubsystemError,
HeadSupportsParachains, OverseerSignal, SubsystemError,
};
use polkadot_primitives::v2::Hash;

Expand All @@ -49,11 +49,7 @@ struct Subsystem1;
impl Subsystem1 {
async fn run<Ctx>(mut ctx: Ctx) -> ()
where
Ctx: overseer::SubsystemContext<
Message = CandidateBackingMessage,
AllMessages = AllMessages,
Signal = OverseerSignal,
>,
Ctx: overseer::SubsystemContext<Message = CandidateBackingMessage, Signal = OverseerSignal>,
{
'louy: loop {
match ctx.try_recv().await {
Expand All @@ -79,20 +75,15 @@ impl Subsystem1 {
Default::default(),
tx,
);
ctx.send_message(<Ctx as overseer::SubsystemContext>::AllMessages::from(msg))
.await;
ctx.send_message(msg).await;
}
()
}
}

impl<Context> overseer::Subsystem<Context, SubsystemError> for Subsystem1
where
Context: overseer::SubsystemContext<
Message = CandidateBackingMessage,
AllMessages = AllMessages,
Signal = OverseerSignal,
>,
Context: overseer::SubsystemContext<Message = CandidateBackingMessage, Signal = OverseerSignal>,
{
fn start(self, ctx: Context) -> SpawnedSubsystem<SubsystemError> {
let future = Box::pin(async move {
Expand All @@ -113,7 +104,6 @@ impl Subsystem2 {
where
Ctx: overseer::SubsystemContext<
Message = CandidateValidationMessage,
AllMessages = AllMessages,
Signal = OverseerSignal,
>,
{
Expand Down Expand Up @@ -148,11 +138,8 @@ impl Subsystem2 {

impl<Context> overseer::Subsystem<Context, SubsystemError> for Subsystem2
where
Context: overseer::SubsystemContext<
Message = CandidateValidationMessage,
AllMessages = AllMessages,
Signal = OverseerSignal,
>,
Context:
overseer::SubsystemContext<Message = CandidateValidationMessage, Signal = OverseerSignal>,
{
fn start(self, ctx: Context) -> SpawnedSubsystem<SubsystemError> {
let future = Box::pin(async move {
Expand Down
4 changes: 2 additions & 2 deletions node/overseer/overseer-gen/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ is not ready to be included in the Overseer:
```rust
#[overlord(signal=SigSigSig, event=Event, gen=AllMessages, error=OverseerError)]
pub struct Overseer {
#[subsystem(MsgA)]
#[subsystem(MsgA, sends: MsgB)]
sub_a: AwesomeSubSysA,

#[subsystem(MsgB), wip]
#[subsystem(MsgB, sends: MsgA), wip]
sub_b: AwesomeSubSysB, // This subsystem will not be required nor allowed to be set
}
```
Expand Down
37 changes: 23 additions & 14 deletions node/overseer/overseer-gen/examples/dummy.rs
Original file line number Diff line number Diff line change
@@ -1,31 +1,40 @@
//! A dummy to be used with cargo expand

use polkadot_node_network_protocol::WrongVariant;
use polkadot_overseer_gen::*;
use polkadot_overseer_gen::{SpawnNamed, *};
use std::collections::HashMap;

/// Concrete subsystem implementation for `MsgStrukt` msg type.
#[derive(Default)]
pub struct AwesomeSubSys;

impl ::polkadot_overseer_gen::Subsystem<AwesomeSubSysContext, Yikes> for AwesomeSubSys {
fn start(self, mut ctx: AwesomeSubSysContext) -> SpawnedSubsystem<Yikes> {
impl ::polkadot_overseer_gen::Subsystem<XxxSubsystemContext<MsgStrukt>, Yikes> for AwesomeSubSys {
fn start(self, mut ctx: XxxSubsystemContext<MsgStrukt>) -> SpawnedSubsystem<Yikes> {
let mut sender = ctx.sender().clone();

ctx.spawn("awesome", Box::pin(async move { sender.send_message(Plinko).await }))
.unwrap();
ctx.spawn(
"AwesomeSubsys",
Box::pin(async move {
sender.send_message(Plinko).await;
}),
)
.unwrap();
unimplemented!("starting yay!")
}
}

#[derive(Default)]
pub struct GoblinTower;

impl ::polkadot_overseer_gen::Subsystem<GoblinTowerContext, Yikes> for GoblinTower {
fn start(self, mut ctx: GoblinTowerContext) -> SpawnedSubsystem<Yikes> {
impl ::polkadot_overseer_gen::Subsystem<XxxSubsystemContext<Plinko>, Yikes> for GoblinTower {
fn start(self, mut ctx: XxxSubsystemContext<Plinko>) -> SpawnedSubsystem<Yikes> {
let mut sender = ctx.sender().clone();
ctx.spawn("awesome", Box::pin(async move { sender.send_message(MsgStrukt(0u8)).await }))
.unwrap();
ctx.spawn(
"GoblinTower",
Box::pin(async move {
sender.send_message(MsgStrukt(8u8)).await;
}),
)
.unwrap();
unimplemented!("welcum")
}
}
Expand Down Expand Up @@ -96,11 +105,11 @@ impl NetworkMsg {
}

#[overlord(signal=SigSigSig, event=EvX, error=Yikes, network=NetworkMsg, gen=AllMessages)]
struct Yyy<T> {
#[subsystem(consumes: MsgStrukt, sends: Plinko)]
struct Xxx<T> {
#[subsystem(consumes: MsgStrukt, sends: [Plinko])]
sub0: AwesomeSubSys,

#[subsystem(no_dispatch, blocking, consumes: Plinko, sends: MsgStrukt)]
#[subsystem(no_dispatch, blocking, consumes: Plinko, sends: [MsgStrukt])]
plinkos: GoblinTower,

i_like_pi: f64,
Expand Down Expand Up @@ -135,7 +144,7 @@ impl SpawnNamed for DummySpawner {
struct DummyCtx;

fn main() {
let (overseer, _handle): (Yyy<_, f64>, _) = Yyy::builder()
let (overseer, _handle): (Xxx<_, f64>, _) = Xxx::builder()
.sub0(AwesomeSubSys::default())
.plinkos(GoblinTower::default())
.i_like_pi(::std::f64::consts::PI)
Expand Down
2 changes: 1 addition & 1 deletion node/overseer/overseer-gen/proc-macro/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ petgraph = "0.6.0"
assert_matches = "1.5.0"

[features]
default = ["expand"]
default = ["graph", "expand"]
# write the expanded version to a `overlord-expansion.[a-f0-9]{10}.rs`
# in the `OUT_DIR` as defined by `cargo` for the `expander` crate.
expand = []
Expand Down
19 changes: 8 additions & 11 deletions node/overseer/overseer-gen/proc-macro/src/impl_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,10 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream {
let builder = format_ident!("{}Builder", overseer_name);
let handle = format_ident!("{}Handle", overseer_name);
let connector = format_ident!("{}Connector", overseer_name);
let subsystem_ctx_name = format_ident!("{}SubsystemContext", overseer_name);

let subsystem_name = &info.subsystem_names_without_wip();
let subsystem_generics = &info.subsystem_generic_types();
let subsystem_ctx_names =
&Vec::from_iter(subsystem_generics.iter().map(|name| format_ident!("{}Context", name)));

let consumes = &info.consumes_without_wip();
let channel_name = &info.channel_names_without_wip("");
Expand Down Expand Up @@ -104,8 +103,7 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream {
info.subsystems().iter().filter(|ssf| !ssf.wip).enumerate().map(|(idx, ssf)| {
let field_name = &ssf.name;
let field_type = &ssf.generic;
let subsystem_ctx_name = format_ident!("{}Context", &field_type);

let subsystem_consumes = &ssf.message_to_consume;
// Remove state generic for the item to be replaced. It sufficient to know `field_type` for
// that since we always move from `Init<#field_type>` to `Init<NEW>`.
let impl_subsystem_state_generics = recollect_without_idx(&subsystem_passthrough_state_generics[..], idx);
Expand Down Expand Up @@ -137,7 +135,7 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream {
impl <InitStateSpawner, #field_type, #( #impl_subsystem_state_generics, )* #( #baggage_passthrough_state_generics, )*>
#builder <InitStateSpawner, #( #current_state_generics, )* #( #baggage_passthrough_state_generics, )*>
where
#field_type : Subsystem<#subsystem_ctx_name, #error_ty>,
#field_type : Subsystem<#subsystem_ctx_name<#subsystem_consumes>, #error_ty>,
{
/// Specify the subsystem in the builder directly
pub fn #field_name (self, var: #field_type ) ->
Expand All @@ -154,7 +152,6 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream {
spawner: self.spawner,
}
}

/// Specify the the initialization function for a subsystem
pub fn #field_name_with<'a, F>(self, subsystem_init_fn: F ) ->
#builder <InitStateSpawner, #( #post_setter_state_generics, )* #( #baggage_passthrough_state_generics, )*>
Expand All @@ -181,7 +178,7 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream {
impl <InitStateSpawner, #field_type, #( #impl_subsystem_state_generics, )* #( #baggage_passthrough_state_generics, )*>
#builder <InitStateSpawner, #( #post_setter_state_generics, )* #( #baggage_passthrough_state_generics, )*>
where
#field_type : Subsystem<#subsystem_ctx_name, #error_ty>,
#field_type : Subsystem<#subsystem_ctx_name<#subsystem_consumes>, #error_ty>,
{
/// Replace a subsystem by another implementation for the
/// consumable message type.
Expand All @@ -190,7 +187,7 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream {
where
#field_type: 'static,
F: 'static + FnOnce(#field_type) -> NEW,
NEW: #support_crate ::Subsystem<#subsystem_ctx_name, #error_ty>,
NEW: #support_crate ::Subsystem<#subsystem_ctx_name< #subsystem_consumes >, #error_ty>,
{
let replacement: Init<NEW> = match self.#field_name {
Init::Fn(fx) =>
Expand Down Expand Up @@ -325,7 +322,7 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream {
#builder<Missing<S> #(, Missing<#field_type> )* >
where
#(
#subsystem_generics : Subsystem<#subsystem_ctx_names, #error_ty>,
#subsystem_generics : Subsystem<#subsystem_ctx_name< #consumes >, #error_ty>,
)*
{
#builder :: new()
Expand Down Expand Up @@ -443,7 +440,7 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream {
where
#spawner_where_clause,
#(
#subsystem_generics : Subsystem<#subsystem_ctx_names, #error_ty>,
#subsystem_generics : Subsystem<#subsystem_ctx_name< #consumes >, #error_ty>,
)*
{
/// Complete the construction and create the overseer type.
Expand Down Expand Up @@ -520,7 +517,7 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream {
// Convert owned `snake case` string to a `kebab case` static str.
let subsystem_static_str = Box::leak(subsystem_string.replace("_", "-").into_boxed_str());

let ctx = #subsystem_ctx_names::new(
let ctx = #subsystem_ctx_name::< #consumes >::new(
signal_rx,
message_rx,
channels_out.clone(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ pub(crate) fn impl_message_wrapper_enum(info: &OverseerInfo) -> Result<proc_macr
};

let ts = quote! {
/// Generated message type wrapper
/// Generated message type wrapper over all possible messages
/// used by any subsystem.
#[allow(missing_docs)]
#[derive(Debug)]
pub enum #message_wrapper {
Expand Down
Loading

0 comments on commit a62b113

Please sign in to comment.