Skip shrink until startup verification is complete (#34209)

This commit is contained in:
Brooks 2023-11-27 10:57:37 -05:00 committed by GitHub
parent deee5f833c
commit da9fad84b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 2 deletions

View File

@ -707,9 +707,21 @@ impl AccountsBackgroundService {
bank.force_flush_accounts_cache();
bank.clean_accounts(last_full_snapshot_slot);
last_cleaned_block_height = bank.block_height();
bank.shrink_ancient_slots();
// See justification below for why we skip 'shrink' here.
if bank.is_startup_verification_complete() {
bank.shrink_ancient_slots();
}
}
// Do not 'shrink' until *after* the startup verification is complete.
// This is because startup verification needs to get the snapshot
// storages *as they existed at startup* (to calculate the accounts hash).
// If 'shrink' were to run, then it is possible startup verification
// (1) could race with 'shrink', and fail to assert that shrinking is not in
// progress, or (2) could get snapshot storages that were newer than what
// was in the snapshot itself.
if bank.is_startup_verification_complete() {
bank.shrink_candidate_slots();
}
bank.shrink_candidate_slots();
}
stats.record_and_maybe_submit(start_time.elapsed());
sleep(Duration::from_millis(INTERVAL_MS));