Uses AccountHash in AppendVec (#33764)

This commit is contained in:
Brooks 2023-10-19 17:38:09 -04:00 committed by GitHub
parent 383aef218d
commit ce8ad77373
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 18 additions and 18 deletions

View File

@ -127,7 +127,7 @@ impl<'storage> StoredAccountMeta<'storage> {
pub fn hash(&self) -> &'storage AccountHash { pub fn hash(&self) -> &'storage AccountHash {
match self { match self {
Self::AppendVec(av) => bytemuck::cast_ref(av.hash()), Self::AppendVec(av) => av.hash(),
Self::Hot(hot) => hot.hash().unwrap_or(&DEFAULT_ACCOUNT_HASH), Self::Hot(hot) => hot.hash().unwrap_or(&DEFAULT_ACCOUNT_HASH),
} }
} }

View File

@ -10186,7 +10186,7 @@ pub mod tests {
rent_epoch: 0, rent_epoch: 0,
}; };
let offset = 3; let offset = 3;
let hash = Hash::new(&[2; 32]); let hash = AccountHash(Hash::new(&[2; 32]));
let stored_meta = StoredMeta { let stored_meta = StoredMeta {
// global write version // global write version
write_version_obsolete: 0, write_version_obsolete: 0,
@ -10289,7 +10289,7 @@ pub mod tests {
}; };
let offset = 99; let offset = 99;
let stored_size = 101; let stored_size = 101;
let hash = Hash::new_unique(); let hash = AccountHash(Hash::new_unique());
let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta { let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta {
meta: &meta, meta: &meta,
account_meta: &account_meta, account_meta: &account_meta,
@ -12649,7 +12649,7 @@ pub mod tests {
}; };
let offset = 99; let offset = 99;
let stored_size = 101; let stored_size = 101;
let hash = Hash::new_unique(); let hash = AccountHash(Hash::new_unique());
let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta { let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta {
meta: &meta, meta: &meta,
account_meta: &account_meta, account_meta: &account_meta,
@ -12691,11 +12691,11 @@ pub mod tests {
const ACCOUNT_DATA_LEN: usize = 3; const ACCOUNT_DATA_LEN: usize = 3;
let data: [u8; ACCOUNT_DATA_LEN] = [0x69, 0x6a, 0x6b]; let data: [u8; ACCOUNT_DATA_LEN] = [0x69, 0x6a, 0x6b];
let offset: usize = 0x6c_6d_6e_6f_70_71_72_73; let offset: usize = 0x6c_6d_6e_6f_70_71_72_73;
let hash = Hash::from([ let hash = AccountHash(Hash::from([
0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81,
0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x90, 0x91, 0x92, 0x93,
]); ]));
let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta { let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta {
meta: &meta, meta: &meta,

View File

@ -2026,7 +2026,7 @@ pub mod tests {
rent_epoch: 0, rent_epoch: 0,
}; };
let offset = 3; let offset = 3;
let hash = Hash::new(&[2; 32]); let hash = AccountHash(Hash::new(&[2; 32]));
let stored_meta = StoredMeta { let stored_meta = StoredMeta {
// global write version // global write version
write_version_obsolete: 0, write_version_obsolete: 0,
@ -3009,7 +3009,7 @@ pub mod tests {
}; };
let offset = 99; let offset = 99;
let stored_size = 101; let stored_size = 101;
let hash = Hash::new_unique(); let hash = AccountHash(Hash::new_unique());
let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta { let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta {
meta: &meta, meta: &meta,
account_meta: &account_meta, account_meta: &account_meta,
@ -3091,7 +3091,7 @@ pub mod tests {
}; };
let offset = 99; let offset = 99;
let stored_size = 1; // size is 1 byte for each entry to test `bytes` later let stored_size = 1; // size is 1 byte for each entry to test `bytes` later
let hash = Hash::new_unique(); let hash = AccountHash(Hash::new_unique());
let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta { let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta {
meta: &meta, meta: &meta,
account_meta: &account_meta, account_meta: &account_meta,

View File

@ -20,7 +20,6 @@ use {
solana_sdk::{ solana_sdk::{
account::{AccountSharedData, ReadableAccount}, account::{AccountSharedData, ReadableAccount},
clock::Slot, clock::Slot,
hash::Hash,
pubkey::Pubkey, pubkey::Pubkey,
stake_history::Epoch, stake_history::Epoch,
}, },
@ -115,7 +114,7 @@ pub struct AppendVecStoredAccountMeta<'append_vec> {
pub(crate) data: &'append_vec [u8], pub(crate) data: &'append_vec [u8],
pub(crate) offset: usize, pub(crate) offset: usize,
pub(crate) stored_size: usize, pub(crate) stored_size: usize,
pub(crate) hash: &'append_vec Hash, pub(crate) hash: &'append_vec AccountHash,
} }
impl<'append_vec> AppendVecStoredAccountMeta<'append_vec> { impl<'append_vec> AppendVecStoredAccountMeta<'append_vec> {
@ -123,7 +122,7 @@ impl<'append_vec> AppendVecStoredAccountMeta<'append_vec> {
&self.meta.pubkey &self.meta.pubkey
} }
pub fn hash(&self) -> &'append_vec Hash { pub fn hash(&self) -> &'append_vec AccountHash {
self.hash self.hash
} }
@ -488,7 +487,7 @@ impl AppendVec {
pub fn get_account(&self, offset: usize) -> Option<(StoredAccountMeta, usize)> { pub fn get_account(&self, offset: usize) -> Option<(StoredAccountMeta, usize)> {
let (meta, next): (&StoredMeta, _) = self.get_type(offset)?; let (meta, next): (&StoredMeta, _) = self.get_type(offset)?;
let (account_meta, next): (&AccountMeta, _) = self.get_type(next)?; let (account_meta, next): (&AccountMeta, _) = self.get_type(next)?;
let (hash, next): (&Hash, _) = self.get_type(next)?; let (hash, next): (&AccountHash, _) = self.get_type(next)?;
let (data, next) = self.get_slice(next, meta.data_len as usize)?; let (data, next) = self.get_slice(next, meta.data_len as usize)?;
let stored_size = next - offset; let stored_size = next - offset;
Some(( Some((
@ -612,11 +611,11 @@ impl AppendVec {
.map(|account| account.data()) .map(|account| account.data())
.unwrap_or_default() .unwrap_or_default()
.as_ptr(); .as_ptr();
let hash_ptr = hash.0.as_ref().as_ptr(); let hash_ptr = bytemuck::bytes_of(hash).as_ptr();
let ptrs = [ let ptrs = [
(meta_ptr as *const u8, mem::size_of::<StoredMeta>()), (meta_ptr as *const u8, mem::size_of::<StoredMeta>()),
(account_meta_ptr as *const u8, mem::size_of::<AccountMeta>()), (account_meta_ptr as *const u8, mem::size_of::<AccountMeta>()),
(hash_ptr, mem::size_of::<Hash>()), (hash_ptr, mem::size_of::<AccountHash>()),
(data_ptr, data_len), (data_ptr, data_len),
]; ];
if let Some(res) = self.append_ptrs_locked(&mut offset, &ptrs) { if let Some(res) = self.append_ptrs_locked(&mut offset, &ptrs) {
@ -655,6 +654,7 @@ pub mod tests {
rand::{thread_rng, Rng}, rand::{thread_rng, Rng},
solana_sdk::{ solana_sdk::{
account::{accounts_equal, Account, AccountSharedData, WritableAccount}, account::{accounts_equal, Account, AccountSharedData, WritableAccount},
hash::Hash,
timing::duration_as_ms, timing::duration_as_ms,
}, },
std::{mem::ManuallyDrop, time::Instant}, std::{mem::ManuallyDrop, time::Instant},

View File

@ -384,7 +384,7 @@ pub mod tests {
let data = Vec::default(); let data = Vec::default();
let offset = 99; let offset = 99;
let stored_size = 101; let stored_size = 101;
let hash = Hash::new_unique(); let hash = AccountHash(Hash::new_unique());
let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta { let stored_account = StoredAccountMeta::AppendVec(AppendVecStoredAccountMeta {
meta: &meta, meta: &meta,
account_meta: &account_meta, account_meta: &account_meta,
@ -410,7 +410,7 @@ pub mod tests {
for entries in 0..2 { for entries in 0..2 {
for starting_slot in 0..max_slots { for starting_slot in 0..max_slots {
let data = Vec::default(); let data = Vec::default();
let hash = Hash::new_unique(); let hash = AccountHash(Hash::new_unique());
let mut raw = Vec::new(); let mut raw = Vec::new();
let mut raw2 = Vec::new(); let mut raw2 = Vec::new();
let mut raw4 = Vec::new(); let mut raw4 = Vec::new();
@ -564,7 +564,7 @@ pub mod tests {
data: &data, data: &data,
offset, offset,
stored_size, stored_size,
hash: &hashes[entry as usize].0, hash: &hashes[entry as usize],
})); }));
} }
let raw2_refs = raw2.iter().collect::<Vec<_>>(); let raw2_refs = raw2.iter().collect::<Vec<_>>();