diff --git a/accounts-db/src/tiered_storage/hot.rs b/accounts-db/src/tiered_storage/hot.rs index cd5924ee10d0b7..a72ab83c5c5414 100644 --- a/accounts-db/src/tiered_storage/hot.rs +++ b/accounts-db/src/tiered_storage/hot.rs @@ -571,7 +571,9 @@ pub mod tests { let hot_storage = HotStorageReader::new_from_path(&path).unwrap(); for (i, address) in addresses.iter().enumerate() { assert_eq!( - hot_storage.get_owner_address(OwnerOffset(i)).unwrap(), + hot_storage + .get_owner_address(OwnerOffset(i as u32)) + .unwrap(), address, ); } diff --git a/accounts-db/src/tiered_storage/owners.rs b/accounts-db/src/tiered_storage/owners.rs index 10ea4cc94b9cf4..1f570674cd47b6 100644 --- a/accounts-db/src/tiered_storage/owners.rs +++ b/accounts-db/src/tiered_storage/owners.rs @@ -15,8 +15,11 @@ pub struct OwnersBlock; /// The offset to an owner entry in the owners block. /// This is used to obtain the address of the account owner. +/// +/// Note that as its internal type is u32, it means the maximum number of +/// unique owners in one TieredStorageFile is 2^32. #[derive(Clone, Copy, Debug, Eq, PartialEq)] -pub struct OwnerOffset(pub usize); +pub struct OwnerOffset(pub u32); /// OwnersBlock is persisted as a consecutive bytes of pubkeys without any /// meta-data. For each account meta, it has a owner_offset field to @@ -42,8 +45,8 @@ impl OwnersBlock { footer: &TieredStorageFooter, owner_offset: OwnerOffset, ) -> TieredStorageResult<&'a Pubkey> { - let offset = - footer.owners_block_offset as usize + (std::mem::size_of::() * owner_offset.0); + let offset = footer.owners_block_offset as usize + + (std::mem::size_of::() * owner_offset.0 as usize); let (pubkey, _) = get_type::(mmap, offset)?; Ok(pubkey) @@ -90,7 +93,7 @@ mod tests { for (i, address) in addresses.iter().enumerate() { assert_eq!( - OwnersBlock::get_owner_address(&mmap, &footer, OwnerOffset(i)).unwrap(), + OwnersBlock::get_owner_address(&mmap, &footer, OwnerOffset(i as u32)).unwrap(), address ); }