in chunk_cache/src/disk.rs [69:101]
fn evict_to_capacity(
&mut self,
max_total_bytes: u64,
) -> Result<Vec<(Key, VerificationCell<CacheItem>)>, ChunkCacheError> {
let original_total_bytes = self.total_bytes;
let mut ret = Vec::new();
while self.total_bytes > max_total_bytes {
let Some((key, idx)) = self.random_item() else {
error!("attempted to evict item, but no item could be found to be evicted");
break;
};
let items = self.inner.get_mut(&key).ok_or(ChunkCacheError::Infallible)?;
let cache_item = items.swap_remove(idx);
let len = cache_item.len;
if items.is_empty() {
self.inner.remove(&key);
}
ret.push((key, cache_item));
self.total_bytes -= len;
self.num_items -= 1;
}
debug!(
"cache evicting {} items totaling {}",
ret.len(),
output_bytes(original_total_bytes - self.total_bytes)
);
Ok(ret)
}