More conservative purge_zero_lamport_accounts purge logic (#7157)

This commit is contained in:
sakridge
2019-12-02 09:51:05 -08:00
committed by GitHub
parent 1eaf71b5b4
commit 887bff572a
3 changed files with 337 additions and 87 deletions

View File

@@ -29,13 +29,21 @@ impl<T: Clone> AccountsIndex<T> {
}
}
pub fn purge(&mut self, pubkey: &Pubkey) -> Vec<(Slot, T)> {
let mut list = self.account_maps.get(&pubkey).unwrap().write().unwrap();
let reclaims = list
.iter()
fn get_rooted_entries(&self, list: &[(Slot, T)]) -> Vec<(Slot, T)> {
list.iter()
.filter(|(slot, _)| self.is_root(*slot))
.cloned()
.collect();
.collect()
}
pub fn would_purge(&self, pubkey: &Pubkey) -> Vec<(Slot, T)> {
let list = self.account_maps.get(&pubkey).unwrap().read().unwrap();
self.get_rooted_entries(&list)
}
pub fn purge(&self, pubkey: &Pubkey) -> Vec<(Slot, T)> {
let mut list = self.account_maps.get(&pubkey).unwrap().write().unwrap();
let reclaims = self.get_rooted_entries(&list);
list.retain(|(slot, _)| !self.is_root(*slot));
reclaims
}