Skip to content
Snippets Groups Projects
  • Oliver Tale-Yazdi's avatar
    [mq pallet] Custom next queue selectors (#6059) · 7aac8861
    Oliver Tale-Yazdi authored
    
    Changes:
    - Expose a `force_set_head` function from the `MessageQueue` pallet via
    a new trait: `ForceSetHead`. This can be used to force the MQ pallet to
    process this queue next.
    - The change only exposes an internal function through a trait, no audit
    is required.
    
    ## Context
    
    For the Asset Hub Migration (AHM) we need a mechanism to prioritize the
    inbound upward messages and the inbound downward messages on the AH. To
    achieve this, a minimal (and no breaking) change is done to the MQ
    pallet in the form of adding the `force_set_head` function.
    
    An example use of how to achieve prioritization is then demonstrated in
    `integration_test.rs::AhmPrioritizer`. Normally, all queues are
    scheduled round-robin like this:
    
    `| Relay | Para(1) | Para(2) | ... | Relay | ... `
    
    The prioritizer listens to changes to its queue and triggers if either:
    - The queue processed in the last block (to keep the general round-robin
    scheduling)
    - The queue did not process since `n` blocks (to prevent starvation if
    there are too many other queues)
    
    In either situation, it schedules the queue for a streak of three
    consecutive blocks, such that it would become:
    
    `| Relay | Relay | Relay | Para(1) | Para(2) | ... | Relay | Relay |
    Relay | ... `
    
    It basically transforms the round-robin into an elongated round robin.
    Although different strategies can be injected into the pallet at
    runtime, this one seems to strike a good balance between general service
    level and prioritization.
    
    ---------
    
    Signed-off-by: default avatarOliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
    Co-authored-by: default avatarcmd[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    Co-authored-by: default avatarmuharem <ismailov.m.h@gmail.com>
    7aac8861
Code owners
Assign users and groups as approvers for specific file changes. Learn more.