(&self, incoming_size: usize)
| 428 | } |
| 429 | |
| 430 | fn evict_l2_if_needed(&self, incoming_size: usize) { |
| 431 | let current_memory = *self.l2_current_memory.read().unwrap(); |
| 432 | let current_entries = self.l2_cache.read().unwrap().len(); |
| 433 | |
| 434 | if current_memory + incoming_size > self.l2_max_memory |
| 435 | || current_entries >= self.l2_max_entries |
| 436 | { |
| 437 | let mut lru = self.l2_lru.write().unwrap(); |
| 438 | while let Some(key_to_evict) = lru.remove_lru() { |
| 439 | if let Some(evicted_entry) = self.l2_cache.write().unwrap().remove(&key_to_evict) { |
| 440 | let evicted_size = evicted_entry.size_bytes(); |
| 441 | |
| 442 | { |
| 443 | let mut current_memory = self.l2_current_memory.write().unwrap(); |
| 444 | *current_memory = current_memory.saturating_sub(evicted_size); |
| 445 | } |
| 446 | |
| 447 | { |
| 448 | let mut stats = self.stats.write().unwrap(); |
| 449 | stats.evictions += 1; |
| 450 | } |
| 451 | |
| 452 | // Check if we have enough space now |
| 453 | let new_current_memory = *self.l2_current_memory.read().unwrap(); |
| 454 | let new_current_entries = self.l2_cache.read().unwrap().len(); |
| 455 | |
| 456 | if new_current_memory + incoming_size <= self.l2_max_memory |
| 457 | && new_current_entries < self.l2_max_entries |
| 458 | { |
| 459 | break; |
| 460 | } |
| 461 | } |
| 462 | } |
| 463 | } |
| 464 | } |
| 465 | |
| 466 | /// Invalidate entries by graph version |
| 467 | pub fn invalidate_by_graph_version(&self, version: u64) { |
no test coverage detected