mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-27 15:07:59 +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
@@ -411,18 +411,41 @@ where
|
||||
fn kill_child_storage(
|
||||
&mut self,
|
||||
child_info: &ChildInfo,
|
||||
) {
|
||||
limit: Option<u32>,
|
||||
) -> bool {
|
||||
trace!(target: "state", "{:04x}: KillChild({})",
|
||||
self.id,
|
||||
HexDisplay::from(&child_info.storage_key()),
|
||||
);
|
||||
let _guard = guard();
|
||||
|
||||
self.mark_dirty();
|
||||
self.overlay.clear_child_storage(child_info);
|
||||
self.backend.for_keys_in_child_storage(child_info, |key| {
|
||||
self.overlay.set_child_storage(child_info, key.to_vec(), None);
|
||||
});
|
||||
|
||||
if let Some(limit) = limit {
|
||||
let mut num_deleted: u32 = 0;
|
||||
let mut all_deleted = true;
|
||||
self.backend.apply_to_child_keys_while(child_info, |key| {
|
||||
if num_deleted == limit {
|
||||
all_deleted = false;
|
||||
return false;
|
||||
}
|
||||
if let Some(num) = num_deleted.checked_add(1) {
|
||||
num_deleted = num;
|
||||
} else {
|
||||
all_deleted = false;
|
||||
return false;
|
||||
}
|
||||
self.overlay.set_child_storage(child_info, key.to_vec(), None);
|
||||
true
|
||||
});
|
||||
all_deleted
|
||||
} else {
|
||||
self.backend.apply_to_child_keys_while(child_info, |key| {
|
||||
self.overlay.set_child_storage(child_info, key.to_vec(), None);
|
||||
true
|
||||
});
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
fn clear_prefix(&mut self, prefix: &[u8]) {
|
||||
|
||||
Reference in New Issue
Block a user