introduce AtomicAppendVecId (#21793)
This commit is contained in:
parent
a400b5e63d
commit
4c0373b72a
|
@ -114,7 +114,7 @@ const MAX_ITEMS_PER_CHUNK: Slot = 2_500;
|
||||||
// operations that take a storage entry can maintain a common interface
|
// operations that take a storage entry can maintain a common interface
|
||||||
// when interacting with cached accounts. This id is "virtual" in that it
|
// when interacting with cached accounts. This id is "virtual" in that it
|
||||||
// doesn't actually refer to an actual storage entry.
|
// doesn't actually refer to an actual storage entry.
|
||||||
const CACHE_VIRTUAL_STORAGE_ID: usize = AppendVecId::MAX;
|
const CACHE_VIRTUAL_STORAGE_ID: AppendVecId = AppendVecId::MAX;
|
||||||
|
|
||||||
// A specially reserved write version (identifier for ordering writes in an AppendVec)
|
// A specially reserved write version (identifier for ordering writes in an AppendVec)
|
||||||
// for entries in the cache, so that operations that take a storage entry can maintain
|
// for entries in the cache, so that operations that take a storage entry can maintain
|
||||||
|
@ -365,6 +365,7 @@ impl<'a> MultiThreadProgress<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An offset into the AccountsDb::storage vector
|
/// An offset into the AccountsDb::storage vector
|
||||||
|
pub type AtomicAppendVecId = AtomicUsize;
|
||||||
pub type AppendVecId = usize;
|
pub type AppendVecId = usize;
|
||||||
pub type SnapshotStorage = Vec<Arc<AccountStorageEntry>>;
|
pub type SnapshotStorage = Vec<Arc<AccountStorageEntry>>;
|
||||||
pub type SnapshotStorages = Vec<SnapshotStorage>;
|
pub type SnapshotStorages = Vec<SnapshotStorage>;
|
||||||
|
@ -627,7 +628,7 @@ struct CleanKeyTimings {
|
||||||
/// Persistent storage structure holding the accounts
|
/// Persistent storage structure holding the accounts
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct AccountStorageEntry {
|
pub struct AccountStorageEntry {
|
||||||
pub(crate) id: AtomicUsize,
|
pub(crate) id: AtomicAppendVecId,
|
||||||
|
|
||||||
pub(crate) slot: AtomicU64,
|
pub(crate) slot: AtomicU64,
|
||||||
|
|
||||||
|
@ -659,7 +660,7 @@ impl AccountStorageEntry {
|
||||||
let accounts = AppendVec::new(&path, true, file_size as usize);
|
let accounts = AppendVec::new(&path, true, file_size as usize);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
id: AtomicUsize::new(id),
|
id: AtomicAppendVecId::new(id),
|
||||||
slot: AtomicU64::new(slot),
|
slot: AtomicU64::new(slot),
|
||||||
accounts,
|
accounts,
|
||||||
count_and_status: RwLock::new((0, AccountStorageStatus::Available)),
|
count_and_status: RwLock::new((0, AccountStorageStatus::Available)),
|
||||||
|
@ -675,7 +676,7 @@ impl AccountStorageEntry {
|
||||||
num_accounts: usize,
|
num_accounts: usize,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
id: AtomicUsize::new(id),
|
id: AtomicAppendVecId::new(id),
|
||||||
slot: AtomicU64::new(slot),
|
slot: AtomicU64::new(slot),
|
||||||
accounts,
|
accounts,
|
||||||
count_and_status: RwLock::new((0, AccountStorageStatus::Available)),
|
count_and_status: RwLock::new((0, AccountStorageStatus::Available)),
|
||||||
|
@ -979,7 +980,7 @@ pub struct AccountsDb {
|
||||||
recycle_stores: RwLock<RecycleStores>,
|
recycle_stores: RwLock<RecycleStores>,
|
||||||
|
|
||||||
/// distribute the accounts across storage lists
|
/// distribute the accounts across storage lists
|
||||||
pub next_id: AtomicUsize,
|
pub next_id: AtomicAppendVecId,
|
||||||
|
|
||||||
/// Set of shrinkable stores organized by map of slot to append_vec_id
|
/// Set of shrinkable stores organized by map of slot to append_vec_id
|
||||||
pub shrink_candidate_slots: Mutex<ShrinkCandidates>,
|
pub shrink_candidate_slots: Mutex<ShrinkCandidates>,
|
||||||
|
@ -1570,7 +1571,7 @@ impl AccountsDb {
|
||||||
read_only_accounts_cache: ReadOnlyAccountsCache::new(MAX_READ_ONLY_CACHE_DATA_SIZE),
|
read_only_accounts_cache: ReadOnlyAccountsCache::new(MAX_READ_ONLY_CACHE_DATA_SIZE),
|
||||||
recycle_stores: RwLock::new(RecycleStores::default()),
|
recycle_stores: RwLock::new(RecycleStores::default()),
|
||||||
uncleaned_pubkeys: DashMap::new(),
|
uncleaned_pubkeys: DashMap::new(),
|
||||||
next_id: AtomicUsize::new(0),
|
next_id: AtomicAppendVecId::new(0),
|
||||||
shrink_candidate_slots_v1: Mutex::new(Vec::new()),
|
shrink_candidate_slots_v1: Mutex::new(Vec::new()),
|
||||||
shrink_candidate_slots: Mutex::new(HashMap::new()),
|
shrink_candidate_slots: Mutex::new(HashMap::new()),
|
||||||
write_cache_limit_bytes: None,
|
write_cache_limit_bytes: None,
|
||||||
|
|
|
@ -5,7 +5,7 @@ use {
|
||||||
accounts::Accounts,
|
accounts::Accounts,
|
||||||
accounts_db::{
|
accounts_db::{
|
||||||
AccountShrinkThreshold, AccountStorageEntry, AccountsDb, AccountsDbConfig, AppendVecId,
|
AccountShrinkThreshold, AccountStorageEntry, AccountsDb, AccountsDbConfig, AppendVecId,
|
||||||
BankHashInfo, IndexGenerationInfo,
|
AtomicAppendVecId, BankHashInfo, IndexGenerationInfo,
|
||||||
},
|
},
|
||||||
accounts_index::AccountSecondaryIndexes,
|
accounts_index::AccountSecondaryIndexes,
|
||||||
accounts_update_notifier_interface::AccountsUpdateNotifier,
|
accounts_update_notifier_interface::AccountsUpdateNotifier,
|
||||||
|
@ -437,7 +437,7 @@ where
|
||||||
|
|
||||||
// Remap the deserialized AppendVec paths to point to correct local paths
|
// Remap the deserialized AppendVec paths to point to correct local paths
|
||||||
let num_collisions = AtomicUsize::new(0);
|
let num_collisions = AtomicUsize::new(0);
|
||||||
let next_append_vec_id = AtomicUsize::new(0);
|
let next_append_vec_id = AtomicAppendVecId::new(0);
|
||||||
let mut measure_remap = Measure::start("remap");
|
let mut measure_remap = Measure::start("remap");
|
||||||
let mut storage = (0..snapshot_storages.len())
|
let mut storage = (0..snapshot_storages.len())
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
|
|
Loading…
Reference in New Issue