refactor generate_index process_storage_slot (#17982)
This commit is contained in:
parent
bb7413c9f9
commit
7ca04d6a86
|
@ -1324,6 +1324,9 @@ impl Default for AccountsDb {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GenerateIndexAccountsMap<'a> =
|
||||||
|
HashMap<Pubkey, (StoredMetaWriteVersion, AppendVecId, StoredAccountMeta<'a>)>;
|
||||||
|
|
||||||
impl AccountsDb {
|
impl AccountsDb {
|
||||||
pub fn new(paths: Vec<PathBuf>, cluster_type: &ClusterType) -> Self {
|
pub fn new(paths: Vec<PathBuf>, cluster_type: &ClusterType) -> Self {
|
||||||
AccountsDb::new_with_config(
|
AccountsDb::new_with_config(
|
||||||
|
@ -5722,10 +5725,38 @@ impl AccountsDb {
|
||||||
(result, slots)
|
(result, slots)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn process_storage_slot(
|
||||||
|
storage_maps: &[Arc<AccountStorageEntry>],
|
||||||
|
) -> GenerateIndexAccountsMap<'_> {
|
||||||
|
let num_accounts = storage_maps
|
||||||
|
.iter()
|
||||||
|
.map(|storage| storage.approx_stored_count())
|
||||||
|
.sum();
|
||||||
|
let mut accounts_map = GenerateIndexAccountsMap::with_capacity(num_accounts);
|
||||||
|
storage_maps.iter().for_each(|storage| {
|
||||||
|
let accounts = storage.all_accounts();
|
||||||
|
accounts.into_iter().for_each(|stored_account| {
|
||||||
|
let this_version = stored_account.meta.write_version;
|
||||||
|
match accounts_map.entry(stored_account.meta.pubkey) {
|
||||||
|
std::collections::hash_map::Entry::Vacant(entry) => {
|
||||||
|
entry.insert((this_version, storage.append_vec_id(), stored_account));
|
||||||
|
}
|
||||||
|
std::collections::hash_map::Entry::Occupied(mut entry) => {
|
||||||
|
let occupied_version = entry.get().0;
|
||||||
|
if occupied_version < this_version {
|
||||||
|
entry.insert((this_version, storage.append_vec_id(), stored_account));
|
||||||
|
} else {
|
||||||
|
assert!(occupied_version != this_version);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
accounts_map
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(clippy::needless_collect)]
|
#[allow(clippy::needless_collect)]
|
||||||
pub fn generate_index(&self, limit_load_slot_count_from_snapshot: Option<usize>) {
|
pub fn generate_index(&self, limit_load_slot_count_from_snapshot: Option<usize>) {
|
||||||
type AccountsMap<'a> =
|
|
||||||
HashMap<Pubkey, (StoredMetaWriteVersion, AppendVecId, StoredAccountMeta<'a>)>;
|
|
||||||
let mut slots = self.storage.all_slots();
|
let mut slots = self.storage.all_slots();
|
||||||
#[allow(clippy::stable_sort_primitive)]
|
#[allow(clippy::stable_sort_primitive)]
|
||||||
slots.sort();
|
slots.sort();
|
||||||
|
@ -5771,38 +5802,7 @@ impl AccountsDb {
|
||||||
.storage
|
.storage
|
||||||
.get_slot_storage_entries(*slot)
|
.get_slot_storage_entries(*slot)
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
let num_accounts = storage_maps
|
let accounts_map = Self::process_storage_slot(&storage_maps);
|
||||||
.iter()
|
|
||||||
.map(|storage| storage.approx_stored_count())
|
|
||||||
.sum();
|
|
||||||
let mut accounts_map: AccountsMap = AccountsMap::with_capacity(num_accounts);
|
|
||||||
storage_maps.iter().for_each(|storage| {
|
|
||||||
let accounts = storage.all_accounts();
|
|
||||||
accounts.into_iter().for_each(|stored_account| {
|
|
||||||
let this_version = stored_account.meta.write_version;
|
|
||||||
match accounts_map.entry(stored_account.meta.pubkey) {
|
|
||||||
std::collections::hash_map::Entry::Vacant(entry) => {
|
|
||||||
entry.insert((
|
|
||||||
this_version,
|
|
||||||
storage.append_vec_id(),
|
|
||||||
stored_account,
|
|
||||||
));
|
|
||||||
}
|
|
||||||
std::collections::hash_map::Entry::Occupied(mut entry) => {
|
|
||||||
let occupied_version = entry.get().0;
|
|
||||||
if occupied_version < this_version {
|
|
||||||
entry.insert((
|
|
||||||
this_version,
|
|
||||||
storage.append_vec_id(),
|
|
||||||
stored_account,
|
|
||||||
));
|
|
||||||
} else {
|
|
||||||
assert!(occupied_version != this_version);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
scan_time.stop();
|
scan_time.stop();
|
||||||
scan_time_sum += scan_time.as_us();
|
scan_time_sum += scan_time.as_us();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue