1use crate::{
18 prometheus::Registry, HeadSupportsParachains, InitializedOverseerBuilder, MetricsTrait,
19 Overseer, OverseerMetrics, OverseerSignal, OverseerSubsystemContext, SpawnGlue,
20};
21use orchestra::{FromOrchestra, SpawnedSubsystem, Subsystem, SubsystemContext};
22use polkadot_node_subsystem_types::{errors::SubsystemError, messages::*};
23use crate::messages::*;
25
26#[derive(Clone, Copy, Debug)]
29pub struct DummySubsystem;
30
31impl<Context> Subsystem<Context, SubsystemError> for DummySubsystem
32where
33 Context: SubsystemContext<Signal = OverseerSignal, Error = SubsystemError>,
34{
35 fn start(self, mut ctx: Context) -> SpawnedSubsystem<SubsystemError> {
36 let future = Box::pin(async move {
37 loop {
38 match ctx.recv().await {
39 Err(_) => return Ok(()),
40 Ok(FromOrchestra::Signal(OverseerSignal::Conclude)) => return Ok(()),
41 Ok(overseer_msg) => {
42 gum::debug!(
43 target: "dummy-subsystem",
44 "Discarding a message sent from overseer {:?}",
45 overseer_msg
46 );
47 continue
48 },
49 }
50 }
51 });
52
53 SpawnedSubsystem { name: "dummy-subsystem", future }
54 }
55}
56
57pub fn dummy_overseer_builder<Spawner, SupportsParachains>(
61 spawner: Spawner,
62 supports_parachains: SupportsParachains,
63 registry: Option<&Registry>,
64) -> Result<
65 InitializedOverseerBuilder<
66 SpawnGlue<Spawner>,
67 SupportsParachains,
68 DummySubsystem,
69 DummySubsystem,
70 DummySubsystem,
71 DummySubsystem,
72 DummySubsystem,
73 DummySubsystem,
74 DummySubsystem,
75 DummySubsystem,
76 DummySubsystem,
77 DummySubsystem,
78 DummySubsystem,
79 DummySubsystem,
80 DummySubsystem,
81 DummySubsystem,
82 DummySubsystem,
83 DummySubsystem,
84 DummySubsystem,
85 DummySubsystem,
86 DummySubsystem,
87 DummySubsystem,
88 DummySubsystem,
89 DummySubsystem,
90 DummySubsystem,
91 DummySubsystem,
92 >,
93 SubsystemError,
94>
95where
96 SpawnGlue<Spawner>: orchestra::Spawner + 'static,
97 SupportsParachains: HeadSupportsParachains,
98{
99 one_for_all_overseer_builder(spawner, supports_parachains, DummySubsystem, registry)
100}
101
102pub fn one_for_all_overseer_builder<Spawner, SupportsParachains, Sub>(
104 spawner: Spawner,
105 supports_parachains: SupportsParachains,
106 subsystem: Sub,
107 registry: Option<&Registry>,
108) -> Result<
109 InitializedOverseerBuilder<
110 SpawnGlue<Spawner>,
111 SupportsParachains,
112 Sub,
113 Sub,
114 Sub,
115 Sub,
116 Sub,
117 Sub,
118 Sub,
119 Sub,
120 Sub,
121 Sub,
122 Sub,
123 Sub,
124 Sub,
125 Sub,
126 Sub,
127 Sub,
128 Sub,
129 Sub,
130 Sub,
131 Sub,
132 Sub,
133 Sub,
134 Sub,
135 Sub,
136 >,
137 SubsystemError,
138>
139where
140 SpawnGlue<Spawner>: orchestra::Spawner + 'static,
141 SupportsParachains: HeadSupportsParachains,
142 Sub: Clone
143 + Subsystem<OverseerSubsystemContext<AvailabilityDistributionMessage>, SubsystemError>
144 + Subsystem<OverseerSubsystemContext<AvailabilityRecoveryMessage>, SubsystemError>
145 + Subsystem<OverseerSubsystemContext<AvailabilityStoreMessage>, SubsystemError>
146 + Subsystem<OverseerSubsystemContext<BitfieldDistributionMessage>, SubsystemError>
147 + Subsystem<OverseerSubsystemContext<BitfieldSigningMessage>, SubsystemError>
148 + Subsystem<OverseerSubsystemContext<CandidateBackingMessage>, SubsystemError>
149 + Subsystem<OverseerSubsystemContext<CandidateValidationMessage>, SubsystemError>
150 + Subsystem<OverseerSubsystemContext<ChainApiMessage>, SubsystemError>
151 + Subsystem<OverseerSubsystemContext<CollationGenerationMessage>, SubsystemError>
152 + Subsystem<OverseerSubsystemContext<CollatorProtocolMessage>, SubsystemError>
153 + Subsystem<OverseerSubsystemContext<NetworkBridgeRxMessage>, SubsystemError>
154 + Subsystem<OverseerSubsystemContext<NetworkBridgeTxMessage>, SubsystemError>
155 + Subsystem<OverseerSubsystemContext<ProvisionerMessage>, SubsystemError>
156 + Subsystem<OverseerSubsystemContext<RuntimeApiMessage>, SubsystemError>
157 + Subsystem<OverseerSubsystemContext<StatementDistributionMessage>, SubsystemError>
158 + Subsystem<OverseerSubsystemContext<ApprovalDistributionMessage>, SubsystemError>
159 + Subsystem<OverseerSubsystemContext<ApprovalVotingMessage>, SubsystemError>
160 + Subsystem<OverseerSubsystemContext<ApprovalVotingParallelMessage>, SubsystemError>
161 + Subsystem<OverseerSubsystemContext<GossipSupportMessage>, SubsystemError>
162 + Subsystem<OverseerSubsystemContext<DisputeCoordinatorMessage>, SubsystemError>
163 + Subsystem<OverseerSubsystemContext<DisputeDistributionMessage>, SubsystemError>
164 + Subsystem<OverseerSubsystemContext<ChainSelectionMessage>, SubsystemError>
165 + Subsystem<OverseerSubsystemContext<PvfCheckerMessage>, SubsystemError>
166 + Subsystem<OverseerSubsystemContext<ProspectiveParachainsMessage>, SubsystemError>,
167{
168 let metrics = <OverseerMetrics as MetricsTrait>::register(registry)?;
169
170 let builder = Overseer::builder()
171 .availability_distribution(subsystem.clone())
172 .availability_recovery(subsystem.clone())
173 .availability_store(subsystem.clone())
174 .bitfield_distribution(subsystem.clone())
175 .bitfield_signing(subsystem.clone())
176 .candidate_backing(subsystem.clone())
177 .candidate_validation(subsystem.clone())
178 .pvf_checker(subsystem.clone())
179 .chain_api(subsystem.clone())
180 .collation_generation(subsystem.clone())
181 .collator_protocol(subsystem.clone())
182 .network_bridge_tx(subsystem.clone())
183 .network_bridge_rx(subsystem.clone())
184 .provisioner(subsystem.clone())
185 .runtime_api(subsystem.clone())
186 .statement_distribution(subsystem.clone())
187 .approval_distribution(subsystem.clone())
188 .approval_voting(subsystem.clone())
189 .approval_voting_parallel(subsystem.clone())
190 .gossip_support(subsystem.clone())
191 .dispute_coordinator(subsystem.clone())
192 .dispute_distribution(subsystem.clone())
193 .chain_selection(subsystem.clone())
194 .prospective_parachains(subsystem.clone())
195 .activation_external_listeners(Default::default())
196 .active_leaves(Default::default())
197 .spawner(SpawnGlue(spawner))
198 .metrics(metrics)
199 .supports_parachains(supports_parachains);
200 Ok(builder)
201}