add ancient sort_shrink_indexes_by_bytes_saved (#30123)
This commit is contained in:
parent
0bbc4774d7
commit
8785942f56
|
@ -76,6 +76,18 @@ impl AncientSlotInfos {
|
||||||
self.total_alive_bytes += alive_bytes;
|
self.total_alive_bytes += alive_bytes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sort 'shrink_indexes' by most bytes saved, highest to lowest
|
||||||
|
#[allow(dead_code)]
|
||||||
|
fn sort_shrink_indexes_by_bytes_saved(&mut self) {
|
||||||
|
self.shrink_indexes.sort_unstable_by(|l, r| {
|
||||||
|
let amount_shrunk = |index: &usize| {
|
||||||
|
let item = &self.all_infos[*index];
|
||||||
|
item.capacity - item.alive_bytes
|
||||||
|
};
|
||||||
|
amount_shrunk(r).cmp(&amount_shrunk(l))
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AccountsDb {
|
impl AccountsDb {
|
||||||
|
@ -538,4 +550,41 @@ pub mod tests {
|
||||||
assert_eq!(infos.total_alive_bytes_shrink, dead_bytes);
|
assert_eq!(infos.total_alive_bytes_shrink, dead_bytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_sort_shrink_indexes_by_bytes_saved() {
|
||||||
|
let (db, slot1) = create_db_with_storages_and_index(true /*alive*/, 1, None);
|
||||||
|
let storage = db.storage.get_slot_storage_entry(slot1).unwrap();
|
||||||
|
// ignored
|
||||||
|
let slot = 0;
|
||||||
|
|
||||||
|
// info1 is first, equal, last
|
||||||
|
for info1_capacity in [0, 1, 2] {
|
||||||
|
let info1 = SlotInfo {
|
||||||
|
storage: storage.clone(),
|
||||||
|
slot,
|
||||||
|
capacity: info1_capacity,
|
||||||
|
alive_bytes: 0,
|
||||||
|
should_shrink: false,
|
||||||
|
};
|
||||||
|
let info2 = SlotInfo {
|
||||||
|
storage: storage.clone(),
|
||||||
|
slot,
|
||||||
|
capacity: 2,
|
||||||
|
alive_bytes: 1,
|
||||||
|
should_shrink: false,
|
||||||
|
};
|
||||||
|
let mut infos = AncientSlotInfos {
|
||||||
|
all_infos: vec![info1, info2],
|
||||||
|
shrink_indexes: vec![0, 1],
|
||||||
|
..AncientSlotInfos::default()
|
||||||
|
};
|
||||||
|
infos.sort_shrink_indexes_by_bytes_saved();
|
||||||
|
let first = &infos.all_infos[infos.shrink_indexes[0]];
|
||||||
|
let second = &infos.all_infos[infos.shrink_indexes[1]];
|
||||||
|
let first_capacity = first.capacity - first.alive_bytes;
|
||||||
|
let second_capacity = second.capacity - second.alive_bytes;
|
||||||
|
assert!(first_capacity >= second_capacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue