remove get_slot_stores from AccountStorage (#29726)

This commit is contained in:
Jeff Washington (jwash) 2023-01-17 11:26:46 -06:00 committed by GitHub
parent b9324dc060
commit 5188da0492
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 35 deletions

View File

@ -46,8 +46,9 @@ impl AccountStorage {
slot: Slot,
store_id: AppendVecId,
) -> Option<Arc<AccountStorageEntry>> {
self.get_slot_stores_shrinking_in_progress_ok(slot)
.and_then(|AccountStorageReference { id, storage }| (id == store_id).then_some(storage))
self.map
.get(&slot)
.and_then(|r| (r.id == store_id).then_some(Arc::clone(&r.storage)))
.or_else(|| {
self.shrink_in_progress_map.get(&slot).and_then(|entry| {
(entry.value().append_vec_id() == store_id).then(|| Arc::clone(entry.value()))
@ -55,20 +56,6 @@ impl AccountStorage {
})
}
/// public api, should only be called when shrinking is not in progress
pub fn get_slot_stores(&self, slot: Slot) -> Option<AccountStorageReference> {
assert!(self.shrink_in_progress_map.is_empty());
self.get_slot_stores_shrinking_in_progress_ok(slot)
}
/// safe to call while shrinking is in progress
pub(crate) fn get_slot_stores_shrinking_in_progress_ok(
&self,
slot: Slot,
) -> Option<AccountStorageReference> {
self.map.get(&slot).map(|result| result.value().clone())
}
/// return the append vec for 'slot' if it exists
/// This is only ever called when shrink is not possibly running and there is a max of 1 append vec per slot.
pub(crate) fn get_slot_storage_entry(&self, slot: Slot) -> Option<Arc<AccountStorageEntry>> {
@ -81,8 +68,7 @@ impl AccountStorage {
&self,
slot: Slot,
) -> Option<Arc<AccountStorageEntry>> {
self.get_slot_stores_shrinking_in_progress_ok(slot)
.map(|entry| Arc::clone(&entry.storage))
self.map.get(&slot).map(|entry| Arc::clone(&entry.storage))
}
pub(crate) fn all_slots(&self) -> Vec<Slot> {
@ -94,7 +80,7 @@ impl AccountStorage {
#[cfg(test)]
pub(crate) fn is_empty_entry(&self, slot: Slot) -> bool {
assert!(self.shrink_in_progress_map.is_empty());
self.get_slot_stores(slot).is_none()
self.map.get(&slot).is_none()
}
/// initialize the storage map to 'all_storages'
@ -149,10 +135,14 @@ impl AccountStorage {
slot: Slot,
new_store: Arc<AccountStorageEntry>,
) -> ShrinkInProgress<'_> {
let slot_storages = self
.get_slot_stores_shrinking_in_progress_ok(slot)
.expect("no pre-existing storages for shrinking slot");
let shrinking_store = Arc::clone(&slot_storages.storage);
let shrinking_store = Arc::clone(
&self
.map
.get(&slot)
.expect("no pre-existing storage for shrinking slot")
.value()
.storage,
);
let new_id = new_store.append_vec_id();
// 1. insert 'shrinking_store' into 'shrink_in_progress_map'
@ -346,16 +336,6 @@ pub(crate) mod tests {
}
}
#[test]
#[should_panic(expected = "self.shrink_in_progress_map.is_empty()")]
fn test_get_slot_stores_fail() {
let storage = AccountStorage::default();
storage
.shrink_in_progress_map
.insert(0, storage.get_test_storage());
storage.get_slot_stores(0);
}
#[test]
#[should_panic(expected = "self.shrink_in_progress_map.is_empty()")]
fn test_get_slot_storage_entry_fail() {
@ -492,7 +472,7 @@ pub(crate) mod tests {
}
#[test]
#[should_panic(expected = "no pre-existing storages for shrinking slot")]
#[should_panic(expected = "no pre-existing storage for shrinking slot")]
fn test_shrinking_in_progress_fail1() {
// nothing in slot currently
let storage = AccountStorage::default();
@ -501,7 +481,7 @@ pub(crate) mod tests {
}
#[test]
#[should_panic(expected = "no pre-existing storages for shrinking slot")]
#[should_panic(expected = "no pre-existing storage for shrinking slot")]
fn test_shrinking_in_progress_fail2() {
// nothing in slot currently, but there is an empty map entry
let storage = AccountStorage::default();