Use current root slot to disambiguate pruning of old programs (#31548)

* Use current root slot to unambiguate pruning of old programs

* simplify the change

* address comment
This commit is contained in:
Pankaj Garg 2023-05-09 11:28:56 -07:00 committed by GitHub
parent 3bb2e3b546
commit 3fd3e6d4e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 1 deletions

View File

@ -374,6 +374,7 @@ impl LoadedPrograms {
/// Before rerooting the blockstore this removes all programs of orphan forks
pub fn prune<F: ForkGraph>(&mut self, fork_graph: &F, new_root: Slot) {
let previous_root = self.latest_root;
self.entries.retain(|_key, second_level| {
let mut first_ancestor_found = false;
*second_level = second_level
@ -383,7 +384,10 @@ impl LoadedPrograms {
let relation = fork_graph.relationship(entry.deployment_slot, new_root);
if entry.deployment_slot >= new_root {
matches!(relation, BlockRelation::Equal | BlockRelation::Descendant)
} else if !first_ancestor_found && matches!(relation, BlockRelation::Ancestor) {
} else if !first_ancestor_found
&& (matches!(relation, BlockRelation::Ancestor)
|| entry.deployment_slot < previous_root)
{
first_ancestor_found = true;
first_ancestor_found
} else {