Skip to content

Commit

Permalink
add uncleaned roots when we shrink away non-zero lamport accounts
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffwashington committed Sep 3, 2024
1 parent a9ac3f5 commit cc86501
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions accounts-db/src/accounts_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2038,6 +2038,7 @@ pub struct ShrinkStats {
accounts_loaded: AtomicU64,
purged_zero_lamports: AtomicU64,
accounts_not_found_in_index: AtomicU64,
adding_slots_to_clean: AtomicU64,
}

impl ShrinkStats {
Expand Down Expand Up @@ -2156,6 +2157,11 @@ impl ShrinkStats {
self.accounts_not_found_in_index.swap(0, Ordering::Relaxed),
i64
),
(
"adding_slots_to_clean",
self.adding_slots_to_clean.swap(0, Ordering::Relaxed),
i64
),
);
}
}
Expand Down Expand Up @@ -2384,6 +2390,13 @@ impl ShrinkAncientStats {
.swap(0, Ordering::Relaxed),
i64
),
(
"adding_slots_to_clean",
self.shrink_stats
.adding_slots_to_clean
.swap(0, Ordering::Relaxed),
i64
),
);
}
}
Expand Down Expand Up @@ -3960,6 +3973,7 @@ impl AccountsDb {
let mut alive = 0;
let mut dead = 0;
let mut index = 0;
let mut adding_slots_to_clean = 0;
let mut index_scan_returned_some_count = 0;
let mut index_scan_returned_none_count = 0;
let mut all_are_zero_lamports = true;
Expand Down Expand Up @@ -4006,6 +4020,18 @@ impl AccountsDb {
unrefed_pubkeys.push(pubkey);
result = AccountsIndexScanResult::Unref;
dead += 1;

// If we are marking something dead, and the only remaining alive account is zero lamport, then make that zero lamport slot ready to be cleaned.
// If that slot happens to only contain zero lamport accounts, the whole slot will go away
if slot_list.len() == 1 // should we also check for ref counts here?
&& slot_list
.iter()
.all(|(_slot, acct_info)| acct_info.is_zero_lamport())
{
adding_slots_to_clean += 1;
self.accounts_index
.add_uncleaned_roots(slot_list.iter().map(|(slot, _)| *slot));
}
} else {
do_populate_accounts_for_shrink(ref_count, slot_list);
}
Expand Down Expand Up @@ -4036,6 +4062,9 @@ impl AccountsDb {
.fetch_add(index_scan_returned_none_count, Ordering::Relaxed);
stats.alive_accounts.fetch_add(alive, Ordering::Relaxed);
stats.dead_accounts.fetch_add(dead, Ordering::Relaxed);
stats
.adding_slots_to_clean
.fetch_add(adding_slots_to_clean, Ordering::Relaxed);

LoadAccountsIndexForShrink {
alive_accounts,
Expand Down

0 comments on commit cc86501

Please sign in to comment.