소스 검색

v2.0: Fixes clean_old_storages_with_reclaims tests (backport of #4147) (#4166)

* Fixes clean_old_storages_with_reclaims tests (#4147)

(cherry picked from commit 4eabeedaa2f26822b9eb61d8e081c5edb03544da)

# Conflicts:
#	accounts-db/src/accounts_db/tests.rs

* fix merge conflicts

---------

Co-authored-by: Brooks <brooks@anza.xyz>
mergify[bot] 11 달 전
부모
커밋
99ac010533
1개의 변경된 파일16개의 추가작업 그리고 10개의 파일을 삭제
  1. 16 10
      accounts-db/src/accounts_db.rs

+ 16 - 10
accounts-db/src/accounts_db.rs

@@ -18109,14 +18109,19 @@ pub mod tests {
                 slot,
                 slot,
                 &[(&pubkey, &account), (&Pubkey::new_unique(), &account)],
                 &[(&pubkey, &account), (&Pubkey::new_unique(), &account)],
             );
             );
-            accounts_db.calculate_accounts_delta_hash(slot);
             accounts_db.add_root_and_flush_write_cache(slot);
             accounts_db.add_root_and_flush_write_cache(slot);
+            // ensure this slot is *not* in the dirty_stores or uncleaned_pubkeys, because we want to
+            // test cleaning *old* storages, i.e. when they aren't explicitly marked for cleaning
+            assert!(!accounts_db.dirty_stores.contains_key(&slot));
+            assert!(!accounts_db.uncleaned_pubkeys.contains_key(&slot));
         }
         }
 
 
-        // for this test, `new_slot` must not be in the uncleaned_roots list
-        accounts_db.accounts_index.remove_uncleaned_root(new_slot);
-        assert!(accounts_db.accounts_index.is_uncleaned_root(old_slot));
-        assert!(!accounts_db.accounts_index.is_uncleaned_root(new_slot));
+        // add `old_slot` to the dirty stores list to mimic it being picked up as old
+        let old_storage = accounts_db
+            .storage
+            .get_slot_storage_entry_shrinking_in_progress_ok(old_slot)
+            .unwrap();
+        accounts_db.dirty_stores.insert(old_slot, old_storage);
 
 
         // ensure the slot list for `pubkey` has both the old and new slots
         // ensure the slot list for `pubkey` has both the old and new slots
         let slot_list = accounts_db
         let slot_list = accounts_db
@@ -18164,13 +18169,14 @@ pub mod tests {
                 &[(&pubkey, &account), (&Pubkey::new_unique(), &account)],
                 &[(&pubkey, &account), (&Pubkey::new_unique(), &account)],
             );
             );
             accounts_db.calculate_accounts_delta_hash(slot);
             accounts_db.calculate_accounts_delta_hash(slot);
+            // ensure this slot is in uncleaned_pubkeys (but not dirty_stores) so it'll be cleaned
+            assert!(!accounts_db.dirty_stores.contains_key(&slot));
+            assert!(accounts_db.uncleaned_pubkeys.contains_key(&slot));
         }
         }
-        // do not root `new_slot`!
-        accounts_db.add_root_and_flush_write_cache(old_slot);
 
 
-        // for this test, `new_slot` must not be a root
-        assert!(accounts_db.accounts_index.is_uncleaned_root(old_slot));
-        assert!(!accounts_db.accounts_index.is_uncleaned_root(new_slot));
+        // only `old_slot` should be rooted, not `new_slot`
+        accounts_db.add_root_and_flush_write_cache(old_slot);
+        assert!(accounts_db.accounts_index.is_alive_root(old_slot));
         assert!(!accounts_db.accounts_index.is_alive_root(new_slot));
         assert!(!accounts_db.accounts_index.is_alive_root(new_slot));
 
 
         // ensure the slot list for `pubkey` has both the old and new slots
         // ensure the slot list for `pubkey` has both the old and new slots