mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 14:01:02 +00:00
511891dcce
Closes #3774 Closes #3826
2.0 KiB
2.0 KiB
Limit outgoing messages
Status
Accepted + implemented.
Context
Previously, there was no way to limit and hence reason about a subset of subsystems, and if they form a cycle. Limiting the outgoing message types is a first step to create respective graphs and use classic graph algorithms to detect those and leave it to the user to resolve these.
Decision
Annotate the #[overlord] inner #[subsystem(..)] annotation
with an aditional set of outgoing messages and enforce this via more fine grained trait bounds on the Sender and <Context>::Sender bounds.
Consequences
- A graph will be spawn for every compilation under the
OUT_DIRof the crate where#[overlord]is specified. - Each subsystem has a consuming message which is often referred to as generic
M(no change on that, is as before), but now we have traitAssociateOutgoing { type OutgoingMessages = ..; }which defines an outgoing helperenumthat is generated with an ident constructed as${Subsystem}OutgoingMessageswhere${Subsystem}is the subsystem identifier as used in the overseer declaration.${Subsystem}OutgoingMessagesis used throughout everywhere to constrain the outgoing messages (commonly referred to asOutgoingMessagegeneric bounded by${Subsystem}OutgoingMessages: From<OutgoingMessage>or::OutgoingMessages: From. It's what allows the construction of the graph and compile time verification. ${Subsystem}SenderTraitand${Subsystem}ContextTraitare accumulation traits or wrapper traits, that combine over all annotated M orOutgoingMessagesfrom the overseer declaration or their respective outgoing types. It is usage convenience and assures consistency within a subsystem while also maintaining a single source of truth for which messages can be sent by a particular subsystem. Note that this is sidestepped for the test subsystem, which may consumegen=AllMessages, the global message wrapper type.Job-based subsystems, being on their way out, are patched, but they now are generic over theSendertype, leaking that type.