Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implements a mechanism to lock/unlock the SortedListProvider and bags-list iter #6510

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

gpestana
Copy link
Contributor

@gpestana gpestana commented Nov 16, 2024

Implements a mechanism to lock/unlock the SortedListProvider and bags-list iter.

WIP and currently implementing Option 1.

Goals:

  1. Add a new method to trait SortedListProvider to allow locking and unlocking the ordering of the list's elements.
  2. Implement a mechanism to lock and unlock the ordering of the list iterator returned by SortedListProvider::iter() implementation of the bags-list.
  3. When the lock is set, allow all the bags list mutations that do not change the order of the iterator.

Option 1.

Return err List::ReorderingNotAllowed whenever a bags-list extrinsic or SortedListProvider method is called that may affect the iterator ordering while the lock is set, ie:

  • SortedListProvider::on_insert (inserting ID in the list will change the iter)
  • SortedListProvider::on_update (updating an ID score may cause a rebag)
  • SortedListProvider::on_remove (removing an ID in the list will change the iter)
  • BagsList::call::rebag
  • BagsList::call::put_in_front_of
  • BagsList::call::put_in_front_of_other

Even tough this approach is simple to implement and can be implemented all at the bags-list level, it may be too strict as some of the sorted list provider method calls may not affect the iter ordering or their implementation could be refactored to apply score mutations without changing the iter ordering e.g. on_update scores without rebag, on_remove do not remove the node from the list, etc.

Option 2.

Same as option 1, but refactor the sorted list provider implementation to ensure that all list mutations happen but ensure the list ordering does not change if the lock is set.

@gpestana gpestana added the T2-pallets This PR/Issue is related to a particular pallet. label Nov 16, 2024
@gpestana gpestana self-assigned this Nov 16, 2024
@gpestana gpestana requested a review from a team as a code owner November 16, 2024 14:50
@gpestana gpestana marked this pull request as draft November 16, 2024 14:50
@gpestana gpestana changed the title Implements the bags-list and sorted list provider re-ordering lock/unlock Implements a mechanism to lock/unlock the SortedListProvider and bags-list iter Nov 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
T2-pallets This PR/Issue is related to a particular pallet.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant