Relay chain coretime assigner does not support more assignments than fit in a single XCM message (currently 28) #6102
Labels
C1-mentor
A task where a mentor is available. Please indicate in the issue who the mentor could be.
C2-good-first-issue
A task for a first time contributor to become familiar with the Polkadot-SDK.
D0-easy
Can be fixed primarily by duplicating and adapting code by an intermediate coder.
I2-bug
The node fails to follow expected behavior.
T8-polkadot
This PR/Issue is related to/affects the Polkadot network.
The system allows interlacing right down to the single block level (80 assignments per timeslice, each with a CoreMask with one bit set)
The problem is that it creates a call that doesn't actually fit in an XCM message (we can fit max 28 assignments in a single XCM)
We can easily chunk that on the Coretime Chain side and send it over as four messages, however with the current design that means we need to call
assign_core
multiple times on the relay for a given timeslice which is disallowed by design due to some assumptions made by the scheduler.Mitigation in the mean time:
28 assignments is the limit, but 27 assignments that don't add up to a complete mask will be rejected due to the requirement for a full mask on the relay. Therefore we take the first 27 and append an
Idle
assignment, taking it to 28.This will make anybody who interlaces more than 27 times lose some assignments, but it's better than the current system, which just drops the entire core's assignments because the message is too big. Once this is missed, it's gone from the workplan and is a total mess. Far preferable to truncate and assign everything we can until we can drop some assumptions in the scheduler on the relay.
Mitigation for the Polkadot launch: polkadot-fellows/runtimes#434
Testnets mitigation: #6022
The text was updated successfully, but these errors were encountered: