ancestors.large_range_slots becomes HashSet (#17446)

This commit is contained in:
Jeff Washington (jwash)
2021-05-25 11:00:50 -05:00
committed by GitHub
parent 2019558f03
commit d39a327138

View File

@ -1,5 +1,5 @@
use solana_sdk::clock::Slot; use solana_sdk::clock::Slot;
use std::collections::HashMap; use std::collections::{HashMap, HashSet};
pub type AncestorsForSerialization = HashMap<Slot, usize>; pub type AncestorsForSerialization = HashMap<Slot, usize>;
@ -9,7 +9,7 @@ pub struct Ancestors {
slots: Vec<Option<usize>>, slots: Vec<Option<usize>>,
count: usize, count: usize,
max: Slot, max: Slot,
large_range_slots: HashMap<Slot, usize>, large_range_slots: HashSet<Slot>,
} }
// some tests produce ancestors ranges that are too large such // some tests produce ancestors ranges that are too large such
@ -28,7 +28,7 @@ impl From<Vec<(Slot, usize)>> for Ancestors {
}); });
let range = result.range(); let range = result.range();
if range > ANCESTORS_HASH_MAP_SIZE { if range > ANCESTORS_HASH_MAP_SIZE {
result.large_range_slots = source.into_iter().collect(); result.large_range_slots = source.into_iter().map(|(slot, _)| slot).collect();
result.min = 0; result.min = 0;
result.max = 0; result.max = 0;
} else { } else {
@ -59,8 +59,7 @@ impl From<&HashMap<Slot, usize>> for Ancestors {
}); });
let range = result.range(); let range = result.range();
if range > ANCESTORS_HASH_MAP_SIZE { if range > ANCESTORS_HASH_MAP_SIZE {
result.large_range_slots = result.large_range_slots = source.iter().map(|(slot, _size)| *slot).collect();
source.iter().map(|(slot, size)| (*slot, *size)).collect();
result.min = 0; result.min = 0;
result.max = 0; result.max = 0;
} else { } else {
@ -98,7 +97,7 @@ impl Ancestors {
.filter_map(|(size, i)| i.map(|_| size as u64 + self.min)) .filter_map(|(size, i)| i.map(|_| size as u64 + self.min))
.collect::<Vec<_>>() .collect::<Vec<_>>()
} else { } else {
self.large_range_slots.keys().copied().collect::<Vec<_>>() self.large_range_slots.iter().copied().collect::<Vec<_>>()
} }
} }
@ -137,7 +136,7 @@ impl Ancestors {
let slot = self.slot_index(slot); let slot = self.slot_index(slot);
self.slots[slot].is_some() self.slots[slot].is_some()
} else { } else {
self.large_range_slots.contains_key(slot) self.large_range_slots.contains(slot)
} }
} }
@ -209,7 +208,7 @@ pub mod tests {
} }
self.slots[slot as usize] = Some(size); self.slots[slot as usize] = Some(size);
} else { } else {
self.large_range_slots.insert(slot, size); self.large_range_slots.insert(slot);
} }
} }
} }