[TieredStorage] TieredStorageReader:: and HotStorageReader:: accounts() (#35031)
#### Problem HotStorageReader and TieredStorageReader haven't implemented accounts() that is required by AcocuntsFile. #### Summary of Changes This PR implements accounts() for both HotStorageReader and TieredStorageReader #### Test Plan Extend the existing test to cover accounts().
This commit is contained in:
parent
bf95f65ce1
commit
dd30175e55
|
@ -458,6 +458,24 @@ impl HotStorageReader {
|
|||
IndexOffset(index_offset.0.saturating_add(1)),
|
||||
)))
|
||||
}
|
||||
|
||||
/// Return a vector of account metadata for each account, starting from
|
||||
/// `index_offset`
|
||||
pub fn accounts(
|
||||
&self,
|
||||
mut index_offset: IndexOffset,
|
||||
) -> TieredStorageResult<Vec<StoredAccountMeta>> {
|
||||
let mut accounts = Vec::with_capacity(
|
||||
self.footer
|
||||
.account_entry_count
|
||||
.saturating_sub(index_offset.0) as usize,
|
||||
);
|
||||
while let Some((account, next)) = self.get_account(index_offset)? {
|
||||
accounts.push(account);
|
||||
index_offset = next;
|
||||
}
|
||||
Ok(accounts)
|
||||
}
|
||||
}
|
||||
|
||||
fn write_optional_fields(
|
||||
|
@ -1402,5 +1420,21 @@ pub mod tests {
|
|||
storable_accounts.get(stored_info.offset);
|
||||
verify_account(&stored_meta, account, address, account_hash);
|
||||
}
|
||||
|
||||
// verify get_accounts
|
||||
let accounts = hot_storage.accounts(IndexOffset(0)).unwrap();
|
||||
|
||||
// first, we verify everything
|
||||
for (i, stored_meta) in accounts.iter().enumerate() {
|
||||
let (account, address, account_hash, _write_version) = storable_accounts.get(i);
|
||||
verify_account(stored_meta, account, address, account_hash);
|
||||
}
|
||||
|
||||
// second, we verify various initial position
|
||||
let total_stored_accounts = accounts.len();
|
||||
for i in 0..total_stored_accounts {
|
||||
let partial_accounts = hot_storage.accounts(IndexOffset(i as u32)).unwrap();
|
||||
assert_eq!(&partial_accounts, &accounts[i..]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -148,4 +148,15 @@ impl TieredStorageReader {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Return a vector of account metadata for each account, starting from
|
||||
/// `index_offset`
|
||||
pub fn accounts(
|
||||
&self,
|
||||
index_offset: IndexOffset,
|
||||
) -> TieredStorageResult<Vec<StoredAccountMeta>> {
|
||||
match self {
|
||||
Self::Hot(hot) => hot.accounts(index_offset),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue