mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 01:11:10 +00:00
Allow capping the amount of work performed when deleting a child trie (#7671)
* Allow Backend::for_keys_in_child_storage to be aborted by the closure * Ext::kill_child_storage now takes an upper limit for backend deletion * Add Storage::storage_kill_limited() runtime interface * review: Use a new version of kill_storage instead of a new interface * review: Simplify boolean expression Co-authored-by: cheme <emericchevalier.pro@gmail.com> * review: Rename for_keys_in_child_storage Co-authored-by: cheme <emericchevalier.pro@gmail.com>
This commit is contained in:
committed by
GitHub
parent
4689c21069
commit
9ce24fe1f4
@@ -279,7 +279,35 @@ pub trait DefaultChildStorage {
|
||||
storage_key: &[u8],
|
||||
) {
|
||||
let child_info = ChildInfo::new_default(storage_key);
|
||||
self.kill_child_storage(&child_info);
|
||||
self.kill_child_storage(&child_info, None);
|
||||
}
|
||||
|
||||
/// Clear a child storage key.
|
||||
///
|
||||
/// Deletes all keys from the overlay and up to `limit` keys from the backend if
|
||||
/// it is set to `Some`. No limit is applied when `limit` is set to `None`.
|
||||
///
|
||||
/// The limit can be used to partially delete a child trie in case it is too large
|
||||
/// to delete in one go (block).
|
||||
///
|
||||
/// It returns false iff some keys are remaining in
|
||||
/// the child trie after the functions returns.
|
||||
///
|
||||
/// # Note
|
||||
///
|
||||
/// Please note that keys that are residing in the overlay for that child trie when
|
||||
/// issuing this call are all deleted without counting towards the `limit`. Only keys
|
||||
/// written during the current block are part of the overlay. Deleting with a `limit`
|
||||
/// mostly makes sense with an empty overlay for that child trie.
|
||||
///
|
||||
/// Calling this function multiple times per block for the same `storage_key` does
|
||||
/// not make much sense because it is not cumulative when called inside the same block.
|
||||
/// Use this function to distribute the deletion of a single child trie across multiple
|
||||
/// blocks.
|
||||
#[version(2)]
|
||||
fn storage_kill(&mut self, storage_key: &[u8], limit: Option<u32>) -> bool {
|
||||
let child_info = ChildInfo::new_default(storage_key);
|
||||
self.kill_child_storage(&child_info, limit)
|
||||
}
|
||||
|
||||
/// Check a child storage key.
|
||||
|
||||
Reference in New Issue
Block a user