remove storage_finder from write_accounts_to_storage (#30172)
Co-authored-by: Trent Nelson <trent@solana.com>
This commit is contained in:
parent
5494146413
commit
bfc29a6b2f
|
@ -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),
|
||||
|
|
Loading…
Reference in New Issue