From fbb1dd5fe5fa98e8ce6dc700946e1d11d4016e1a Mon Sep 17 00:00:00 2001 From: Yueh-Hsuan Chiang <93241502+yhchiang-sol@users.noreply.github.com> Date: Fri, 7 Jul 2023 00:08:50 +0800 Subject: [PATCH] Replace AccountsFile::cloned_account by ReadableAccount::to_account_shared_data() (#32399) #### Problem Both AppendVec::cloned_account() and ReadableAccount::to_account_shard_data() returns an AccountSharedData instance by cloning itself as pointed out under a comment in PR #32380. #### Summary of Changes This PR removes AccountsFile::cloned_account() and replaces its call-sites by ReadableAccount::to_account_shared_data(). --- runtime/src/account_storage/meta.rs | 14 +------------- runtime/src/accounts_db.rs | 6 ++++-- .../src/accounts_db/geyser_plugin_utils.rs | 2 +- runtime/src/append_vec.rs | 19 +++++-------------- runtime/store-tool/src/main.rs | 2 +- 5 files changed, 12 insertions(+), 31 deletions(-) diff --git a/runtime/src/account_storage/meta.rs b/runtime/src/account_storage/meta.rs index 8e244d18e6..c80bfaacfd 100644 --- a/runtime/src/account_storage/meta.rs +++ b/runtime/src/account_storage/meta.rs @@ -1,11 +1,6 @@ use { crate::{append_vec::AppendVecStoredAccountMeta, storable_accounts::StorableAccounts}, - solana_sdk::{ - account::{AccountSharedData, ReadableAccount}, - hash::Hash, - pubkey::Pubkey, - stake_history::Epoch, - }, + solana_sdk::{account::ReadableAccount, hash::Hash, pubkey::Pubkey, stake_history::Epoch}, std::{borrow::Borrow, marker::PhantomData}, }; @@ -108,13 +103,6 @@ pub enum StoredAccountMeta<'a> { } impl<'a> StoredAccountMeta<'a> { - /// Return a new Account by copying all the data referenced by the `StoredAccountMeta`. - pub fn clone_account(&self) -> AccountSharedData { - match self { - Self::AppendVec(av) => av.clone_account(), - } - } - pub fn pubkey(&self) -> &'a Pubkey { match self { Self::AppendVec(av) => av.pubkey(), diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 17356bf603..28450dfbc2 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -933,7 +933,9 @@ impl<'a> LoadedAccount<'a> { pub fn take_account(self) -> AccountSharedData { match self { - LoadedAccount::Stored(stored_account_meta) => stored_account_meta.clone_account(), + LoadedAccount::Stored(stored_account_meta) => { + stored_account_meta.to_account_shared_data() + } LoadedAccount::Cached(cached_account) => match cached_account { Cow::Owned(cached_account) => cached_account.account.clone(), Cow::Borrowed(cached_account) => cached_account.account.clone(), @@ -12720,7 +12722,7 @@ pub mod tests { stored_size: CACHE_VIRTUAL_STORED_SIZE as usize, hash: &hash, }); - let account = stored_account.clone_account(); + let account = stored_account.to_account_shared_data(); let expected_account_hash = if cfg!(debug_assertions) { Hash::from_str("6qtBXmRrLdTdAV5bK6bZZJxQA4fPSUBxzQGq2BQSat25").unwrap() diff --git a/runtime/src/accounts_db/geyser_plugin_utils.rs b/runtime/src/accounts_db/geyser_plugin_utils.rs index 3c38ee204e..0fbc11c079 100644 --- a/runtime/src/accounts_db/geyser_plugin_utils.rs +++ b/runtime/src/accounts_db/geyser_plugin_utils.rs @@ -215,7 +215,7 @@ pub mod tests { self.accounts_notified .entry(*account.pubkey()) .or_default() - .push((slot, account.clone_account())); + .push((slot, account.to_account_shared_data())); } fn notify_end_of_restore_from_snapshot(&self) { diff --git a/runtime/src/append_vec.rs b/runtime/src/append_vec.rs index 5c0eca8c14..ccc69eb21f 100644 --- a/runtime/src/append_vec.rs +++ b/runtime/src/append_vec.rs @@ -17,7 +17,7 @@ use { log::*, memmap2::MmapMut, solana_sdk::{ - account::{Account, AccountSharedData, ReadableAccount}, + account::{AccountSharedData, ReadableAccount}, clock::Slot, hash::Hash, pubkey::Pubkey, @@ -118,16 +118,6 @@ pub struct AppendVecStoredAccountMeta<'append_vec> { } impl<'append_vec> AppendVecStoredAccountMeta<'append_vec> { - pub fn clone_account(&self) -> AccountSharedData { - AccountSharedData::from(Account { - lamports: self.account_meta.lamports, - owner: self.account_meta.owner, - executable: self.account_meta.executable, - rent_epoch: self.account_meta.rent_epoch, - data: self.data.to_vec(), - }) - } - pub fn pubkey(&self) -> &'append_vec Pubkey { &self.meta.pubkey } @@ -175,7 +165,8 @@ impl<'append_vec> AppendVecStoredAccountMeta<'append_vec> { fn sanitize_lamports(&self) -> bool { // Sanitize 0 lamports to ensure to be same as AccountSharedData::default() - self.account_meta.lamports != 0 || self.clone_account() == AccountSharedData::default() + self.account_meta.lamports != 0 + || self.to_account_shared_data() == AccountSharedData::default() } fn ref_executable_byte(&self) -> &u8 { @@ -561,7 +552,7 @@ impl AppendVec { ) -> Option<(StoredMeta, solana_sdk::account::AccountSharedData)> { let (stored_account, _) = self.get_account(offset)?; let meta = stored_account.meta().clone(); - Some((meta, stored_account.clone_account())) + Some((meta, stored_account.to_account_shared_data())) } pub fn get_path(&self) -> PathBuf { @@ -1096,7 +1087,7 @@ pub mod tests { assert_eq!(accounts.len(), size); for (sample, v) in accounts.iter_mut().enumerate() { let account = create_test_account(sample); - let recovered = v.clone_account(); + let recovered = v.to_account_shared_data(); assert_eq!(recovered, account.1) } trace!( diff --git a/runtime/store-tool/src/main.rs b/runtime/store-tool/src/main.rs index a8879a690d..f1ad3d01d3 100644 --- a/runtime/store-tool/src/main.rs +++ b/runtime/store-tool/src/main.rs @@ -65,7 +65,7 @@ fn is_account_zeroed(account: &StoredAccountMeta) -> bool { && account.data_len() == 0 && account.write_version() == 0 && account.pubkey() == &Pubkey::default() - && account.clone_account() == AccountSharedData::default() + && account.to_account_shared_data() == AccountSharedData::default() } #[cfg(test)]