mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-01 00:47:55 +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
@@ -1147,6 +1147,86 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn limited_child_kill_works() {
|
||||
let child_info = ChildInfo::new_default(b"sub1");
|
||||
let initial: HashMap<_, BTreeMap<_, _>> = map![
|
||||
Some(child_info.clone()) => map![
|
||||
b"a".to_vec() => b"0".to_vec(),
|
||||
b"b".to_vec() => b"1".to_vec(),
|
||||
b"c".to_vec() => b"2".to_vec(),
|
||||
b"d".to_vec() => b"3".to_vec()
|
||||
],
|
||||
];
|
||||
let backend = InMemoryBackend::<BlakeTwo256>::from(initial);
|
||||
|
||||
let mut overlay = OverlayedChanges::default();
|
||||
overlay.set_child_storage(&child_info, b"1".to_vec(), Some(b"1312".to_vec()));
|
||||
overlay.set_child_storage(&child_info, b"2".to_vec(), Some(b"1312".to_vec()));
|
||||
overlay.set_child_storage(&child_info, b"3".to_vec(), Some(b"1312".to_vec()));
|
||||
overlay.set_child_storage(&child_info, b"4".to_vec(), Some(b"1312".to_vec()));
|
||||
|
||||
{
|
||||
let mut offchain_overlay = Default::default();
|
||||
let mut cache = StorageTransactionCache::default();
|
||||
let mut ext = Ext::new(
|
||||
&mut overlay,
|
||||
&mut offchain_overlay,
|
||||
&mut cache,
|
||||
&backend,
|
||||
changes_trie::disabled_state::<_, u64>(),
|
||||
None,
|
||||
);
|
||||
assert_eq!(ext.kill_child_storage(&child_info, Some(2)), false);
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
overlay.children()
|
||||
.flat_map(|(iter, _child_info)| iter)
|
||||
.map(|(k, v)| (k.clone(), v.value().clone()))
|
||||
.collect::<BTreeMap<_, _>>(),
|
||||
map![
|
||||
b"1".to_vec() => None.into(),
|
||||
b"2".to_vec() => None.into(),
|
||||
b"3".to_vec() => None.into(),
|
||||
b"4".to_vec() => None.into(),
|
||||
b"a".to_vec() => None.into(),
|
||||
b"b".to_vec() => None.into(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn limited_child_kill_off_by_one_works() {
|
||||
let child_info = ChildInfo::new_default(b"sub1");
|
||||
let initial: HashMap<_, BTreeMap<_, _>> = map![
|
||||
Some(child_info.clone()) => map![
|
||||
b"a".to_vec() => b"0".to_vec(),
|
||||
b"b".to_vec() => b"1".to_vec(),
|
||||
b"c".to_vec() => b"2".to_vec(),
|
||||
b"d".to_vec() => b"3".to_vec()
|
||||
],
|
||||
];
|
||||
let backend = InMemoryBackend::<BlakeTwo256>::from(initial);
|
||||
let mut overlay = OverlayedChanges::default();
|
||||
let mut offchain_overlay = Default::default();
|
||||
let mut cache = StorageTransactionCache::default();
|
||||
let mut ext = Ext::new(
|
||||
&mut overlay,
|
||||
&mut offchain_overlay,
|
||||
&mut cache,
|
||||
&backend,
|
||||
changes_trie::disabled_state::<_, u64>(),
|
||||
None,
|
||||
);
|
||||
assert_eq!(ext.kill_child_storage(&child_info, Some(0)), false);
|
||||
assert_eq!(ext.kill_child_storage(&child_info, Some(1)), false);
|
||||
assert_eq!(ext.kill_child_storage(&child_info, Some(2)), false);
|
||||
assert_eq!(ext.kill_child_storage(&child_info, Some(3)), false);
|
||||
assert_eq!(ext.kill_child_storage(&child_info, Some(4)), true);
|
||||
assert_eq!(ext.kill_child_storage(&child_info, Some(5)), true);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn set_child_storage_works() {
|
||||
let child_info = ChildInfo::new_default(b"sub1");
|
||||
@@ -1179,6 +1259,7 @@ mod tests {
|
||||
);
|
||||
ext.kill_child_storage(
|
||||
child_info,
|
||||
None,
|
||||
);
|
||||
assert_eq!(
|
||||
ext.child_storage(
|
||||
|
||||
Reference in New Issue
Block a user