remove storage_finder from write_accounts_to_storage (#30172)

Co-authored-by: Trent Nelson <trent@solana.com>
This commit is contained in:
Jeff Washington (jwash) 2023-02-07 16:44:40 -06:00 committed by GitHub
parent 5494146413
commit bfc29a6b2f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 26 deletions

View File

@ -1452,7 +1452,6 @@ pub struct AccountsStats {
store_handle_reclaims: AtomicU64,
store_append_accounts: AtomicU64,
pub stakes_cache_check_and_store_us: AtomicU64,
store_find_store: AtomicU64,
store_num_accounts: AtomicU64,
store_total_data: AtomicU64,
recycle_store_count: AtomicU64,
@ -6043,29 +6042,18 @@ impl AccountsDb {
fn write_accounts_to_storage<
'a,
'b,
F: FnMut(Slot, usize) -> Arc<AccountStorageEntry>,
T: ReadableAccount + Sync,
U: StorableAccounts<'a, T>,
V: Borrow<Hash>,
>(
&self,
slot: Slot,
mut storage_finder: F,
storage: &AccountStorageEntry,
accounts_and_meta_to_store: &StorableAccountsWithHashesAndWriteVersions<'a, 'b, T, U, V>,
) -> Vec<AccountInfo> {
let mut infos: Vec<AccountInfo> = Vec::with_capacity(accounts_and_meta_to_store.len());
let mut total_append_accounts_us = 0;
let mut total_storage_find_us = 0;
while infos.len() < accounts_and_meta_to_store.len() {
let mut storage_find = Measure::start("storage_finder");
let account = accounts_and_meta_to_store.account(infos.len());
let data_len = account
.map(|account| account.data().len())
.unwrap_or_default();
// ok if storage can't hold data + alignment at end - we just need the unaligned data to fit
let storage = storage_finder(slot, data_len + STORE_META_OVERHEAD);
storage_find.stop();
total_storage_find_us += storage_find.as_us();
let mut append_accounts = Measure::start("append_accounts");
let rvs = storage
.accounts
@ -6076,6 +6064,10 @@ impl AccountsDb {
storage.set_status(AccountStorageStatus::Full);
// See if an account overflows the append vecs in the slot.
let account = accounts_and_meta_to_store.account(infos.len());
let data_len = account
.map(|account| account.data().len())
.unwrap_or_default();
let data_len = (data_len + STORE_META_OVERHEAD) as u64;
if !self.has_space_available(slot, data_len) {
let special_store_size = std::cmp::max(data_len * 2, self.file_size);
@ -6109,9 +6101,6 @@ impl AccountsDb {
self.stats
.store_append_accounts
.fetch_add(total_append_accounts_us, Ordering::Relaxed);
self.stats
.store_find_store
.fetch_add(total_storage_find_us, Ordering::Relaxed);
infos
}
@ -6609,12 +6598,10 @@ impl AccountsDb {
)
}
StoreTo::Storage(storage) => {
let storage_finder = Box::new(move |_slot, _size| Arc::clone(storage));
if accounts.has_hash_and_write_version() {
self.write_accounts_to_storage(
slot,
storage_finder,
storage,
&StorableAccountsWithHashesAndWriteVersions::<'_, '_, _, _, &Hash>::new(
accounts,
),
@ -6626,7 +6613,7 @@ impl AccountsDb {
match hashes {
Some(hashes) => self.write_accounts_to_storage(
slot,
storage_finder,
storage,
&StorableAccountsWithHashesAndWriteVersions::new_with_hashes_and_write_versions(
accounts,
hashes,
@ -6655,7 +6642,7 @@ impl AccountsDb {
self.write_accounts_to_storage(
slot,
storage_finder,
storage,
&StorableAccountsWithHashesAndWriteVersions::new_with_hashes_and_write_versions(accounts, hashes, write_versions),
)
}
@ -8215,11 +8202,6 @@ impl AccountsDb {
.swap(0, Ordering::Relaxed),
i64
),
(
"find_storage",
self.stats.store_find_store.swap(0, Ordering::Relaxed),
i64
),
(
"num_accounts",
self.stats.store_num_accounts.swap(0, Ordering::Relaxed),