in chunk_cache/src/disk.rs [104:126]
fn random_item(&self) -> Option<(Key, usize)> {
debug_assert_eq!(
self.inner.values().map(|v| v.len()).sum::<usize>(),
self.num_items,
"real num items != stored num items"
);
if self.num_items == 0 {
error!("cache random_item for eviction: no items in cache");
return None;
}
let random_item = rand::random::<u32>() as usize % self.num_items;
let mut count = 0;
for (key, items) in self.inner.iter() {
if random_item < count + items.len() {
return Some((key.clone(), random_item - count));
}
count += items.len();
}
// should never occur
error!("cache random_item for eviction: tried to return random item error not enough items");
None
}