handle ancient overflow case correctly (#29458)
This commit is contained in:
parent
8397f295c0
commit
e99afb4e85
|
@ -4501,7 +4501,8 @@ impl AccountsDb {
|
|||
return; // skipping slot with no useful accounts to write
|
||||
}
|
||||
|
||||
let (shrink_in_progress, time) = measure!(current_ancient.create_if_necessary(slot, self));
|
||||
let (mut shrink_in_progress, time) =
|
||||
measure!(current_ancient.create_if_necessary(slot, self));
|
||||
let mut create_and_insert_store_elapsed_us = time.as_us();
|
||||
let available_bytes = current_ancient.append_vec().accounts.remaining_bytes();
|
||||
// split accounts in 'slot' into:
|
||||
|
@ -4532,8 +4533,17 @@ impl AccountsDb {
|
|||
// Assert: it cannot be the case that we already had an ancient append vec at this slot and
|
||||
// yet that ancient append vec does not have room for the accounts stored at this slot currently
|
||||
assert_ne!(slot, current_ancient.slot());
|
||||
let (_, time) = measure!(current_ancient.create_ancient_append_vec(slot, self));
|
||||
let (shrink_in_progress_overflow, time) =
|
||||
measure!(current_ancient.create_ancient_append_vec(slot, self));
|
||||
create_and_insert_store_elapsed_us += time.as_us();
|
||||
// We cannot possibly be shrinking the original slot that created an ancient append vec
|
||||
// AND not have enough room in the ancient append vec at that slot
|
||||
// to hold all the contents of that slot.
|
||||
// We need this new 'shrink_in_progress' to be used in 'remove_old_stores_shrink' below.
|
||||
// All non-overflow accounts were put in a prior slot's ancient append vec. All overflow accounts
|
||||
// are essentially being shrunk into a new ancient append vec in 'slot'.
|
||||
assert!(shrink_in_progress.is_none());
|
||||
shrink_in_progress = Some(shrink_in_progress_overflow);
|
||||
|
||||
// write the overflow accounts to the next ancient storage
|
||||
let timing =
|
||||
|
|
Loading…
Reference in New Issue