From fd11e261ddd7eb386e61520a18dc8aee3c6f3c39 Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Tue, 4 Oct 2022 09:11:44 -0700 Subject: [PATCH] use ref for snapshot_storages.iter_range (#28205) --- runtime/src/accounts_db.rs | 17 +++++++++++------ runtime/src/sorted_storages.rs | 28 ++++++++++++++-------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index a805c9bf1c..6df72be661 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -6880,7 +6880,7 @@ impl AccountsDb { let range = snapshot_storages.range(); let ancient_slots = snapshot_storages - .iter_range(range.start..one_epoch_old_slot) + .iter_range(&(range.start..one_epoch_old_slot)) .filter_map(|(slot, storages)| storages.map(|_| slot)) .collect::>(); let ancient_slot_count = ancient_slots.len() as Slot; @@ -6958,6 +6958,7 @@ impl AccountsDb { if start == end_exclusive { return scanner.scanning_complete(); } + let range_this_chunk = start..end_exclusive; let should_cache_hash_data = CalcAccountsHashConfig::get_should_cache_hash_data() || config.store_detailed_debug_info_on_failure; @@ -6988,7 +6989,7 @@ impl AccountsDb { let mut load_from_cache = true; let mut hasher = std::collections::hash_map::DefaultHasher::new(); // wrong one? - for (slot, sub_storages) in snapshot_storages.iter_range(start..end_exclusive) { + for (slot, sub_storages) in snapshot_storages.iter_range(&range_this_chunk) { if bin_range.start == 0 && slot < one_epoch_old { self.update_old_slot_stats(stats, sub_storages); } @@ -7033,7 +7034,11 @@ impl AccountsDb { let hash = hasher.finish(); let file_name = format!( "{}.{}.{}.{}.{}", - start, end_exclusive, bin_range.start, bin_range.end, hash + range_this_chunk.start, + range_this_chunk.end, + bin_range.start, + bin_range.end, + hash ); let mut retval = scanner.get_accum(); if eligible_for_caching @@ -7056,7 +7061,7 @@ impl AccountsDb { String::default() } } else { - for (slot, sub_storages) in snapshot_storages.iter_range(start..end_exclusive) { + for (slot, sub_storages) in snapshot_storages.iter_range(&range_this_chunk) { if bin_range.start == 0 && slot < one_epoch_old { self.update_old_slot_stats(stats, sub_storages); } @@ -7064,7 +7069,7 @@ impl AccountsDb { String::default() }; - for (slot, sub_storages) in snapshot_storages.iter_range(start..end_exclusive) { + for (slot, sub_storages) in snapshot_storages.iter_range(&range_this_chunk) { scanner.set_slot(slot); if let Some(sub_storages) = sub_storages { Self::scan_multiple_account_storages_one_slot(sub_storages, &mut scanner); @@ -7106,7 +7111,7 @@ impl AccountsDb { let acceptable_straggler_slot_count = 100; // do nothing special for these old stores which will likely get cleaned up shortly let sub = slots_per_epoch + acceptable_straggler_slot_count; let in_epoch_range_start = max.saturating_sub(sub); - for (slot, storages) in storages.iter_range(..in_epoch_range_start) { + for (slot, storages) in storages.iter_range(&(..in_epoch_range_start)) { if let Some(storages) = storages { storages.iter().for_each(|store| { if !is_ancient(&store.accounts) { diff --git a/runtime/src/sorted_storages.rs b/runtime/src/sorted_storages.rs index 467b9ae7c1..2b4c8a3108 100644 --- a/runtime/src/sorted_storages.rs +++ b/runtime/src/sorted_storages.rs @@ -28,7 +28,7 @@ impl<'a> SortedStorages<'a> { } /// primary method of retrieving (Slot, SnapshotStorage) - pub fn iter_range(&'a self, range: R) -> SortedStoragesIter<'a> + pub fn iter_range(&'a self, range: &R) -> SortedStoragesIter<'a> where R: RangeBounds, { @@ -175,7 +175,7 @@ impl<'a> Iterator for SortedStoragesIter<'a> { impl<'a> SortedStoragesIter<'a> { pub fn new>( storages: &'a SortedStorages<'a>, - range: R, + range: &R, ) -> SortedStoragesIter<'a> { let storage_range = storages.range(); let next_slot = match range.start_bound() { @@ -246,19 +246,19 @@ pub mod tests { }; assert_eq!( (0..5).into_iter().collect::>(), - storages.iter_range(..5).map(check).collect::>() + storages.iter_range(&(..5)).map(check).collect::>() ); assert_eq!( (1..5).into_iter().collect::>(), - storages.iter_range(1..5).map(check).collect::>() + storages.iter_range(&(1..5)).map(check).collect::>() ); assert_eq!( (0..0).into_iter().collect::>(), - storages.iter_range(..).map(check).collect::>() + storages.iter_range(&(..)).map(check).collect::>() ); assert_eq!( (0..0).into_iter().collect::>(), - storages.iter_range(1..).map(check).collect::>() + storages.iter_range(&(1..)).map(check).collect::>() ); // only item is slot 3 @@ -278,7 +278,7 @@ pub mod tests { assert_eq!( (start..end).into_iter().collect::>(), storages - .iter_range(start..end) + .iter_range(&(start..end)) .map(check) .collect::>() ); @@ -286,15 +286,15 @@ pub mod tests { } assert_eq!( (3..5).into_iter().collect::>(), - storages.iter_range(..5).map(check).collect::>() + storages.iter_range(&(..5)).map(check).collect::>() ); assert_eq!( (1..=3).into_iter().collect::>(), - storages.iter_range(1..).map(check).collect::>() + storages.iter_range(&(1..)).map(check).collect::>() ); assert_eq!( (3..=3).into_iter().collect::>(), - storages.iter_range(..).map(check).collect::>() + storages.iter_range(&(..)).map(check).collect::>() ); // items in slots 2 and 4 @@ -318,7 +318,7 @@ pub mod tests { assert_eq!( (start..end).into_iter().collect::>(), storages - .iter_range(start..end) + .iter_range(&(start..end)) .map(check) .collect::>() ); @@ -326,15 +326,15 @@ pub mod tests { } assert_eq!( (2..5).into_iter().collect::>(), - storages.iter_range(..5).map(check).collect::>() + storages.iter_range(&(..5)).map(check).collect::>() ); assert_eq!( (1..=4).into_iter().collect::>(), - storages.iter_range(1..).map(check).collect::>() + storages.iter_range(&(1..)).map(check).collect::>() ); assert_eq!( (2..=4).into_iter().collect::>(), - storages.iter_range(..).map(check).collect::>() + storages.iter_range(&(..)).map(check).collect::>() ); }