MCPcopy Create free account
hub / github.com/GraphLite-AI/GraphLite / evict_l2_if_needed

Method evict_l2_if_needed

graphlite/src/cache/result_cache.rs:430–464  ·  view source on GitHub ↗
(&self, incoming_size: usize)

Source from the content-addressed store, hash-verified

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) {

Callers 1

insert_l2Method · 0.80

Calls 5

unwrapMethod · 0.80
remove_lruMethod · 0.80
lenMethod · 0.45
removeMethod · 0.45
size_bytesMethod · 0.45

Tested by

no test coverage detected