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:
parent
f1836bb10f
commit
fbb1dd5fe5
|
@ -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(),
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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!(
|
||||
|
|
|
@ -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)]
|
||||
|
|
Loading…
Reference in New Issue