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().
This commit is contained in:
Yueh-Hsuan Chiang 2023-07-07 00:08:50 +08:00 committed by GitHub
parent f1836bb10f
commit fbb1dd5fe5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 12 additions and 31 deletions

View File

@ -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(),

View File

@ -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()

View File

@ -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) {

View File

@ -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!(

View File

@ -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)]